我试图从具有“属于一起”的列的矩阵转到已形成相关子矩阵的行和的矩阵。即从
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16]
[1,] 1 5 9 13 17 21 25 29 33 37 41 45 49 53 57 61
[2,] 2 6 10 14 18 22 26 30 34 38 42 46 50 54 58 62
[3,] 3 7 11 15 19 23 27 31 35 39 43 47 51 55 59 63
[4,] 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64
至
[,1] [,2] [,3] [,4] [,5]
[1,] 15 30 46 185 220
[2,] 18 32 48 190 224
[3,] 21 34 50 195 228
[4,] 24 36 52 200 232
我认为必须有一些更优雅和更快的方法来做到这一点,而不是像下面那样循环索引(特别是,我的真实矩阵更像是 4000 乘以数千)。
example <- matrix(1:64, nrow=4)
myindex <- c(1,1,1,2,2,3,3,4,4,4,4,4,5,5,5,5)
summed <- matrix( rep(unique(myindex), each=dim(example)[1]), nrow=dim(example)[1])
for (i in 1:length(unique(myindex))){
summed[,i] <- apply(X=example[,(myindex==i)], MARGIN=1, FUN=sum)
}
可能是我缺乏 apply 和 tapply 的经验,这使我无法弄清楚这一点。当然也欢迎快速 dplyr 方法。