それでも使用できます tapply
ここ:
do.call(rbind,
tapply(seq_len(ncol(dat)),a1,
function(i)rowMeans(dat[,i])))
質問
申し訳ありませんが、人々、私は木のために森を見ることができません。私はたくさん検索しましたが、解決策が見つかりませんでした。たとえば、すべてのユニットの平均が欲しい(潜在的に rowMeans
)マトリックス内の変数のサブセット(または潜在的にデータフレーム)の R
. 。のようにインデックス作成ベクトルを使用して列を選択したい tapply
, 、私が呼んだ a1
以下の例。
> set.seed(23958)
> (dat <- matrix(sample(0:3, 10, replace = TRUE), ncol = 5))
[,1] [,2] [,3] [,4] [,5]
[1,] 2 3 0 2 1
[2,] 2 1 1 2 1
> set.seed(6112)
> (a1 <- sample(1:2, 5, replace = TRUE))
[1] 1 1 2 2 1
この例の解決策はこのように見えるはずですが、もちろん、より包括的な方法でそれをやりたいと思います。私はからの関数を使用するべきだと思っていました apply
家族、しかし私はどちらを見つけることができませんでした。
> cbind(rowMeans(dat[, a1 == 1]), rowMeans(dat[, a1 == 2]))
[,1] [,2]
[1,] 2.000000 1.0
[2,] 1.333333 1.5
解決
それでも使用できます tapply
ここ:
do.call(rbind,
tapply(seq_len(ncol(dat)),a1,
function(i)rowMeans(dat[,i])))
他のヒント
もし、あんたが t
データをransposeして、使用できます by
:
t(do.call(rbind,by(t(dat),a1,colMeans)))
1 2
V1 2.000000 1.0
V2 1.333333 1.5
使用することもできます aggregate
関数:
t(aggregate(t(dat), list(a1), mean))