如何在过滤矩阵列中使用apply函数?

时间:2015-10-18 10:04:45

标签: r conditional-statements apply mean

创建一个矩阵,其中包括(1)指标,(2)条件和(3)感兴趣的变量x

z<-rep(1:10,each=10)
set.seed(974); cond=rbinom(100,3,0.5)
set.seed(974) ; x=rnorm(100,1,10)
All<-cbind(z,cond,x) ; All

使用整个数据集,我可以用colsums或apply来计算感兴趣的数量。例如每10行平均值。

colSums(matrix(as.numeric(All[,3]), nrow=10))/10
apply(matrix(as.numeric(All[,3]), nrow=10),2,mean)

# Filtered dataset.
AllFiltered<-All[All[,2]==1,]

现在,当我执行过滤时,nrow不是常数,例如(1,2,3,3)。有没有办法对每个单独的行组过滤数据执行与上面相同的操作?

Allfiltered

的示例
       z cond           x
 [1,]  1    1 -10.5135290

 [2,]  2    1 -10.9883098
 [3,]  2    1  12.9269151

 [4,]  3    1   5.1725988
 [5,]  3    1  -1.5633754
 [6,]  3    1  -1.3470068

 [7,]  4    1  12.6646369
 [8,]  4    1  -9.7694997
 [9,]  4    1   4.8618008

想获得每组行的均值,其中过滤后的行数不是常数并且等于固定数字(将根据条件过滤器而改变)

1 个答案:

答案 0 :(得分:1)

根据更新的帖子,我们可以使用分组变量作为第一列

tapply(AllFiltered[,3], AllFiltered[,1], FUN= mean)