在大数据帧中对成对列之间的值求平均值

时间:2015-05-18 11:14:05

标签: r apply mean sapply tapply

我有一个由一系列配对列组成的数据框。这是一个小例子。

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)的平均值,因此在示例中我将为每个值之间设置三组平均值我已经设法为一对特定的列应用了一个函数......

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?,但我似乎无法将其应用到我自己的数据集中。

非常感谢任何帮助,谢谢你提前。

1 个答案:

答案 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)用于第二种情况