私の質問は比較的単純で、Rでそれを行う方法をすでに見つけましたが、教育的目的のためにもっと巧妙な方法を探しています。私の解決策はループを使用し、私は常にループをできるだけ避けるようにしています。ループ方法についてインデックスを使って複数の列を集約する巧妙な方法
ind <- c(1,1,1,2,2,1,3,3,3,4)
ザ・:
set.seed(1)
tb <- matrix(round(runif(40,0,5)),4,10)
tb
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 1 3 3 4 5 1 4 2 4
[2,] 2 4 0 2 5 1 2 2 1 1
[3,] 3 5 1 4 2 3 0 2 4 4
[4,] 5 3 1 2 4 1 2 3 3 2
私はindice(またはインデックス)ベクトル以下、それらをrowSumming列の異なるグループを組み合わせたい:
私は、テーブル(またはマトリックス)を持っています:
res.ls <- NULL
for(i in unique(ind)) {
res.ls[[i]] <- rowSums(subset(tb,select=ind==i))
}
do.call("cbind",res.ls)
[,1] [,2] [,3] [,4]
[1,] 10 7 7 4
[2,] 7 7 5 1
[3,] 12 6 6 4
[4,] 10 6 8 2
私は確かにそれを行うにはスマートな方法があります。何かヒント?
メモリを2回転置できる場合は、 '?rowsum'を参照してください。 btw 'set.seed'は呼び出される必要があり、代入されない関数です(' set.seed(1) ') –
転置してからgroup_byを集計してください!申し訳ありませんが、上記のコメントは表示されませんでした。同じ思想 –
@alexis_laz、メモリに関するinterresting point。 set.seedの場合、フランス語では「脳のバブル」と言います...ごめんなさい... – Bastien