行列の行の合計に問題があります。30個の行列で構成されたリストがあります
Matrix<-matrix(1:45, ncol=9)
List<-list(lapply(seq_len(30), function(X) Matrix))
アイデアは、サイズ5 * 3の30個の行列を作成することです。まず、1:3
4:6
7:9
結果が次のようになるように、いくつかの列を合計する必要があります。
[,1] [,2] [,3]
[1,] 18 63 108
[2,] 21 66 111
[3,] 34 69 114
[4,] 47 72 117
[5,] 30 75 120
私はこのコードを使用してこの行列を取得しようとしています:
Y<-lapply(List, function(x) rowSums(x[, 1:3]))
ただし、最初の3つの列を合計することしかできません。
この後、リストを合計して1つの行列(5 * 3)のみを取得する必要があります。final<-reduce(Y,
+コマンド)
が役立つと思います。
540 1890 3240
630 1980 3330
1020 2070 3420
1410 2160 3510
900 2250 3600
ご協力ありがとうございました
たとえば、列を3つにグループ化する方法を見つける必要があります。
grp = (1:ncol(Matrix) -1) %/% 3
または寸法がわかっている場合:
grp = rep(0:2,each=3)
3列のrowSumを実行するには、次の関数を使用してこれを実行できます。
SumCols = function(M,col_grp){
sapply(unique(col_grp),function(i)rowSums(M[,col_grp==i]))
}
SumCols(Matrix,grp)
[,1] [,2] [,3]
[1,] 18 63 108
[2,] 21 66 111
[3,] 24 69 114
[4,] 27 72 117
[5,] 30 75 120
したがって、これを行列のリスト内に配置します。
Reduce("+",lapply(List[[1]],SumCols,grp))
[,1] [,2] [,3]
[1,] 540 1890 3240
[2,] 630 1980 3330
[3,] 720 2070 3420
[4,] 810 2160 3510
[5,] 900 2250 3600
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加