跨大型数据框的成对列之间的平均值
Averaging values between paired columns across a large data frame
我有一个由一系列成对列组成的数据框。这是一个小例子。
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?,但我似乎无法将其应用于我自己的数据集。
任何帮助将不胜感激,在此先感谢您。
尝试
mapply(function(x,y) tapply(x,y, FUN=mean) ,
Example[seq(1, ncol(Example), 2)], Example[seq(2, ncol(Example), 2)])
或者在第二种情况下使用 c(TRUE, FALSE)
和 c(FALSE, TRUE)
而不是 seq(1, ncol(Example), 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?,但我似乎无法将其应用于我自己的数据集。
任何帮助将不胜感激,在此先感谢您。
尝试
mapply(function(x,y) tapply(x,y, FUN=mean) ,
Example[seq(1, ncol(Example), 2)], Example[seq(2, ncol(Example), 2)])
或者在第二种情况下使用 c(TRUE, FALSE)
和 c(FALSE, TRUE)
而不是 seq(1, ncol(Example), 2)