r - R 中的平均列对

标签 r sapply

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

我提供了一个示例数据集、所需的结果以及返回所需结果的嵌套 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) 

  }
}

最佳答案

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

然后您可以将第一列添加到输出矩阵中。

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)
    })
})

关于r - R 中的平均列对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13739243/

相关文章:

r - 如何在一张表中返回多个结果?

r - 在 R 中使用 sapply() 的内存有效方式

vector - 将具有多个参数的函数应用于 Julia 中的向量

r - 从 mpfr 生成的列表中获取值

r - 在 R 中并排显示同一 pdf 中的两个热图

r - tidyr 传播后如何控制新变量的名称?

r - 大 ddply,适当的选择

linux - RStudio 服务器仅因 1 个用户挂起

r - 计算 R 中的平均时间

r - 具有 NA 值的数据框中列的均值和 SD