2

これが些細なことのように思われる場合は申し訳ありませんが、インターネットをしばらく検索した後、解決策を見つけることができませんでした。

列に関連付けられた行列と因子ベクトルがあります。目標は、すべての因子の rowMeans を個別に取得し、元の行列構造を維持することです。したがって、おそらく ave() のようなものになりますが、2 次元配列で動作します。

ここに大まかなデモがあります:

(mat <- rbind(1:5,6:10,11:15))
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    6    7    8    9   10
[3,]   11   12   13   14   15

groups <- c(1,1,1,2,2)

mat[,groups==1] <- rowMeans(mat[,groups==1]) # I am asking about this part
mat[,groups==2] <- rowMeans(mat[,groups==2]) # ...

mat
     [,1] [,2] [,3] [,4] [,5]
[1,]    2    2    2  4.5  4.5
[2,]    7    7    7  9.5  9.5
[3,]   12   12   12 14.5 14.5

実際には、この行列には何百万もの行 (そして列は少ない) があります。そのため、行ごとに機能するソリューションは遅すぎる可能性があります。

私は独自の関数を作成しようとしていますが、これは簡単な 1 行のソリューションがあるように思えます。

4

3 に答える 3

3

1)各行のすべての要素をその行の平均に置き換えたいと仮定するとm、行列がどこにあるかを試してください:

ave(m, row(m))

それが望ましくない場合は、入力と必要な出力を含む完全な例を提供してください。

2)更新された質問については、これを試してください:

t(ave(t(m), group, t(row(m))))

またはこの同等のバリエーション:

ave(m, matrix(group, nrow(m), ncol(m), byrow = TRUE), row(m))
于 2014-10-14T23:34:53.030 に答える