你仍然可以使用 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
删除数据,您可以使用 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))