如何计算每行不同的数字,并在R中创建新的数据帧


mydata
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    3    3    2    3    3    2    3    3    2     3
[2,]    3    3    2    3    3    2    3    3    2     3
[3,]    1    3    2    3    3    2    3    3    2     3
[4,]    1    3    2    3    3    2    3    3    2     3
[5,]    1    3    2    3    3    2    3    3    2     3

我想通过计算每行中不同数字的总数来创建具有三列的新数据帧。预期结果应为

>newdata    
[,1] [,2] [,3]
[1,]    0    3    7
[2,]    0    3    7
[3,]    1    3    6
[4,]    1    3    6
[5,]    1    3    6

感谢您的帮助。

我们可以将reptable一起使用

table(rep(seq_len(nrow(mydata)), ncol(mydata)), c(mydata))

数据

mydata <- structure(c(3, 3, 1, 1, 1, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 3, 3, 
3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 
3, 3, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3), .Dim = c(5L, 10L))

@Ben提供了一个很好的答案,然后诀窍是用as.data.frame.matrix()包装他的表以获得所需的结果:

# example data
mat <- matrix(c(3,3,1,1,1,rep(3,5),rep(2,5),rep(3,10),
rep(2,5),rep(3,10),rep(2,5),rep(3,5)), 
nrow=5, ncol=10)
# count values by row
df <- as.data.frame.matrix(table(row(mat),mat))
# confirm result
str(df)
'data.frame':   5 obs. of  3 variables:
$ 1: int  0 0 1 1 1
$ 2: int  3 3 3 3 3
$ 3: int  7 7 6 6 6

相关内容

  • 没有找到相关文章

最新更新