【问题标题】:average pairs of columns in RR中的平均列对
【发布时间】:2012-12-06 07:58:35
【问题描述】:

我想对数据集中的列对进行平均,而不是移动平均。我想将列分成两组,然后找到每对的平均值。

我展示了一个示例数据集、所需结果以及返回所需结果的嵌套 for 循环。我只是认为可能有更好的方法。抱歉,如果我在另一篇文章中忽略了解决方案。我确实在这里搜索过,但我没有像通常尝试的那样勤奋地搜索互联网。谢谢你的建议。

x = read.table(text = "
  site     yr1  yr2  yr3  yr4
    1       2    4    6    8
    2      10   20   30   40
    3       5   NA    2    3
    4     100  100   NA   NA", 
sep = "", header = TRUE)

x

desired.outcome = read.table(text = "
  site    ave12  ave34
    1       3      7
    2      15     35
    3       5    2.5
    4     100     NA", 
sep = "", header = TRUE)

result <- matrix(NA, ncol=((ncol(x)/2)+1), nrow=nrow(x))

for(i in 1: ((ncol(x)-1)/2)) {
  for(j in 1:nrow(x)) {

     result[j,   1 ] <- x[j,1]
     result[j,(i+1)] <- mean(c(x[j,(1 + ((i-1)*2 + 1))], x[j,(1 + ((i-1)*2 + 2))]), na.rm = TRUE) 

  }
}

【问题讨论】:

    标签: r sapply


    【解决方案1】:
    output <- sapply(seq(2,ncol(x),2), function(i) {
      rowMeans(x[,c(i, i+1)], na.rm=T)
    })
    

    然后您可以将第一列添加到output 矩阵。

    output <- cbind(x[,1], output)
    

    或者,您可以使用within

    within(x, {
        pair.colmeans <- sapply(seq(2, ncol(x), 2), function(i) {
            rowMeans(x[, c(i, i+1)], na.rm=TRUE)
        })
    })
    

    【讨论】:

    • 希望您不要介意编辑。新增within,展示如何直接修改data.frame
    • 很好的贡献,感谢关于“内部”功能的其余部分!我通常不使用这些函数,因为我阅读代码变得更加困难。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    相关资源
    最近更新 更多