行中的sum值,对应于同一行中的某些值

时间:2017-06-01 20:55:07

标签: r

我的数据看起来像这样:

test1 <- rbind(c(1,2,1,10,20,30),c(2,2,3,30,20,10),c(3,3,1,10,10,10))

     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    2    1   10   20   30
[2,]    2    2    3   30   20   10
[3,]    3    3    1   10   10   10

我要做的是总结第4:6列中与1:3中相同值相对应的值,这样我得到3个新列,其中值的总和对应于1,2, 3

    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] 
[1,]    1    2    1   10   20   30  40   20    0
[2,]    2    2    3   30   20   10   0   50   10
[3,]    3    3    1   10   10   10  10    0   20

任何建议将不胜感激!

1 个答案:

答案 0 :(得分:0)

这会将您可以cbind的三列返回到矩阵中:

> do.call(cbind,lapply(1:3, function(c){rowSums((test1[,1:3]==c)*test1[,4:6])}))
     [,1] [,2] [,3]
[1,]   40   20    0
[2,]    0   50   10
[3,]   10    0   20

它使用lapply循环,但我没有看到如何在没有某种循环的情况下完成此操作,无法将数据完全展开为整齐的格式。