2015-05-18 21 views
2

我有一个由一系列成对列组成的数据帧。这是一个小例子。在大型数据帧中对列之间的值进行平均

df1 <- as.data.frame(matrix(sample(0:1000, 36*10, replace=TRUE), ncol=1)) 
df2 <- as.data.frame(rep(1:12, each=30)) 
df3 <- as.data.frame(matrix(sample(0:500, 36*10, replace=TRUE), ncol=1)) 
df4 <- as.data.frame(c(rep(5:12, each=30),rep(1:4, each=30))) 
df5 <- as.data.frame(matrix(sample(0:200, 36*10, replace=TRUE), ncol=1)) 
df6 <- as.data.frame(c(rep(8:12, each=30),rep(1:7, each=30))) 
Example <- cbind(df1,df2,df3,df4,df5,df6) 

我想什么做的是找到基于相邻列中的值奇数列(DF1,DF3,DF5)的平均值,所以这个例子我会三套平均值为1和12之间我已成功地应用一个函数为一对特定的列的每一个值...

Example_two <- cbind(df1,df2) 
colnames (Example_two) <- c("x","y") 
tapply(Example_two$x, Example_two$y, mean) 

然而,我将寻找数据帧将是相当大的,从而某种形式的应用功能对于在每个配对集合中迭代执行此操作来说是理想的。我发现了一个类似的问题Is there a R function that applies a function to each pair of columns?,但我似乎无法将其应用于我自己的数据集。

任何帮助将不胜感激,谢谢你提前。

+0

你需要得到的平均值(摘要)作为一个单独的数据集或如例列? – akrun

+0

最好分开数据集,谢谢。 –

回答

2

尝试

mapply(function(x,y) tapply(x,y, FUN=mean) , 
    Example[seq(1, ncol(Example), 2)], Example[seq(2, ncol(Example), 2)]) 

或代替seq(1, ncol(Example), 2)只是使用c(TRUE, FALSE)c(FALSE, TRUE)对于第二种情况

+0

非常感谢你! –

+0

@JamesWhite很高兴知道它的工作原理。这可以通过几种方式完成,但我认为'mapply'会更容易 – akrun

相关问题