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

问题描述:

创建具有(1)的指标的矩阵,(2)的条件和(3)的兴趣X如何在过滤矩阵列中使用apply函数?

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或施加可变。例如平均每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 

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

+0

更正的感谢! –

+0

基于每个块的nrows,你正在每3行做colMeans? – akrun

+0

我不明白这个问题。你为什么创建'AllFiltered'?这与每10行的平均数有什么关系?您希望的输出与所有这些相关联在一起如何? –

基于更新后,我们可以使用分组变量作为第一列

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

我只对变量x感兴趣,并希望计算每个过滤块的x的均值,然后我有10 * 10行。在条件我有意思(x的3个第一行)后,然后意味着(3个下一行的x)然后意味着(2个下一行的x)。因此,我想总结的行数不是常数。我想最终得到10个x的平均值(感兴趣的变量),但是这次由于条件== 1而被过滤。感谢您的见解! –

+0

@KonstantinosPat你可以检查这是否适合你吗? – akrun

+0

非常感谢你。我不知道分组变量选项。 gr