【问题标题】:R multiple mean by specific range of rows特定行范围内的 R 倍数平均值
【发布时间】:2020-03-11 09:13:33
【问题描述】:

我有一个带有

的 data.frame/table
dim(Tn) 
# 43 rows, 30 columns

我正在尝试为每列计算 5 值均值(因此每列 39 个均值),其中均值计算为

(row-4) : row

喜欢这里的图片:

运行for循环时:

test <- for (j in 2:ncol(Tn)){
          for (i in 5:nrow(Tn)){
              mean(Tn[(i-4):i,j])
}   }

我得到 NULL 结果。如何编写此循环以获取所有情况下每列的 5 值平均值表(nrow(Tn)-4)

【问题讨论】:

    标签: r loops rows col


    【解决方案1】:

    您需要滚动平均值,可以使用zoo::rollmean 计算。试试

    sapply(Tn[-1], zoo::rollmean, k = 5)
    

    考虑这个可重现的示例,我们在 df 中计算 2 列的 3 值均值

    df <- data.frame(a = 1:5, b = 6:10)
    sapply(df, zoo::rollmean, k = 3)
    
    #     a b
    #[1,] 2 7
    #[2,] 3 8
    #[3,] 4 9
    

    【讨论】:

      【解决方案2】:

      如果你使用base R,你可以试试:

      data.frame(t(sapply(seq(nrow(Tn)-4), function(v) colMeans(Tn[v:(v+4),-1]))))
      

      它为您提供所有列的移动窗口平均值。

      例如,给定输入Tn &lt;- data.frame(X = 1:10, Y = 11:20, Z = 21:30)

      > Tn
          X  Y  Z
      1   1 11 21
      2   2 12 22
      3   3 13 23
      4   4 14 24
      5   5 15 25
      6   6 16 26
      7   7 17 27
      8   8 18 28
      9   9 19 29
      10 10 20 30
      

      然后你会得到:

         Y  Z
      1 13 23
      2 14 24
      3 15 25
      4 16 26
      5 17 27
      6 18 28
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-08
        • 1970-01-01
        • 1970-01-01
        • 2020-03-16
        相关资源
        最近更新 更多