【问题标题】:Averaging values between paired columns across a large data frame跨大型数据帧的成对列之间的平均值
【发布时间】:2015-07-29 20:52:39
【问题描述】:

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

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

任何帮助将不胜感激,在此先感谢您。

【问题讨论】:

  • 您需要将平均值(汇总)作为单独的数据集还是作为示例中的列?
  • 最好是单独的数据集,谢谢。

标签: r apply mean sapply tapply


【解决方案1】:

试试

 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)

【讨论】:

  • @JamesWhite 很高兴知道它有效。这可以通过多种方式完成,但我认为mapply 会更容易
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-18
  • 2017-10-13
  • 2020-07-04
相关资源
最近更新 更多