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
感谢您的帮助。
我们可以将rep
与table
一起使用
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