2017-04-05 13 views
1

私はNAの行列を持っていて、各行に3列ごとの平均を求めたいと思います。NAで3列ごとに平均を取る方法

set.seed(100) 
a <- matrix(sample(c(NA, 1:4), 90, replace = TRUE), 10) 

私はNAを含むcolumsの平均を見つけることができません

t(apply(a, 1, tapply, gl(3, 3), mean)) 

コードを使用している場合。私はコードをどのように変更できるのだろうか。どうもありがとう。

+2

'トン(適用(、1、tapply、GL(3、3)、)、na.rm = TRUEを意味する)' –

+0

私は馬鹿、ハハ、感謝しています。 –

答えて

1

また、3次元配列に変換してから、rowMeansを3番目のMARGINにループして取得できます。

res <- apply(array(a, c(nrow(a), 3, 3)), 3, rowMeans, na.rm = TRUE) 
all.equal(res, t(apply(a, 1, tapply, gl(3, 3), 
     mean, na.rm = TRUE)), check.attributes = FALSE) 
#[1] TRUE 
+0

ありがとうございました。 'c(nrow(a)、3、3)'とはどういう意味ですか?ありがとう。 –

+0

@YangYang 3D配列には3つの次元があり、最初は行、2列目、3次元です。ここでは、行数は元の行列の行数と同じです。だから私はそれを 'nrow(a)'と指定しました。次は3です。各配列スライスに3列だけが必要です。 – akrun

+1

ありがとうございました! –

関連する問題