如何计算列的平均值?

时间:2017-08-09 09:58:14

标签: r matrix data.table dplyr

我需要找到每6个月的平均值,从v1到v15。现在我知道有v15列因此它使用我的下面的代码。但是将有超过15列,我需要一个可以解决目的的通用代码。 我正在使用的逻辑是:取列的平均值 - 1:6并打印,然后是2:7,依此类推,直到15,因为我知道有15列。但实际上会有更多列。

csv文件:

    V1      V2      V3      V4      V5      V6      V7      V8      V9      V10     V11     V12     V13     V14     V15
1   NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
2   0.04    0.04    0.04    0.04    0.04    0.04    0.04    0.11    0.04    0.04    0.04    0.04    0.04    0.04    0.04
3   3.29    3.56    3.97    3.23    2.96    2.35    0.06    1.72    2.19    1.92    1.84    2.87    2.57    2.24    3.06
4   11.79   15.01   14.76   13.19   18.29   4.51    16.24   11.92   10.49   13.05   12.74   12.95   12.25   14.46   14.27
5   20.11   21.76   21.92   23.67   19.87   25.59   23.04   16.67   22.78   21.32   20.85   21.57   21.99   22.69   22.96
6   24.85   26.56   29.45   24.96   25.91   16.31   27.51   22.56   28.35   26.96   26.53   28.23   28.24   29.85   29.79
7   29.02   32.75   29.95   27.7    29.6    17.91   32.08   25.71   33.16   31.56   30.89   32.68   34.05   36.26   33.27
8   32.83   33.09   17.03   33.23   31.22   39.71   35.43   28.77   37.09   34.18   34.05   36.98   37.16   38.74   37.32
9   32.86   36.34   35.47   33.6    35  42.79   37.22   30.62   38.74   35.83   36.17   39.48   39.18   42.87   39.54
10  36.02   37.66   36.15   34.79   36.84   22.19   38.9    32.62   40.28   37.87   38.09   41.04   41.62   44.94   42.18
11  36.96   39.22   19.13   36.68   37.43   46.26   40.84   33.88   41.31   39.09   39.14   43.46   42.75   47.2    43.8
12  37.34   40.87   35.91   37.66   39.22   46.95   42.26   35.19   42.93   41  40.61   44.73   45.2    48.14   44.49
13  38.92   38.37   41.01   39.01   41  48.89   43.8    37.16   44.1    42.46   41.3    45.47   46.65   50.48   47.6
14  21.67   43.16   20.98   39.84   42  49.62   44.35   37.46   44.63   43.15   42.64   48.48   48.53   53.55   48.57


a <- t(apply(mat,1,function(x){ c(mean(x[1:6]),mean(x[2:7]),mean(x[3:8]),mean(x[4:9]),mean(x[5:10]),mean(x[6:11]),mean(x[7:12]),mean(x[8:13]),mean(x[9:14]),mean(x[10:15])) }))

请帮忙。提前致谢。

3 个答案:

答案 0 :(得分:3)

我们可以使用滚动平均值(rollmean

来执行此操作
library(zoo)
t(apply(df1, 1, function(x) rollmean(x, 6)))

答案 1 :(得分:2)

使用基数R:

  n=6
  d=lapply(1:(ncol(data)-(n-1)),function(x) x:(x+n-1))
  sapply(d,function(w) rowMeans(data[,w]))

答案 2 :(得分:0)

另一个基本解决方案:

rowlingRowMeans <- function(matrix, n_meanrows){
  out <- NULL
  for(z in 1:(nrow(matrix)-n_meanrows+2)){
    out <- cbind(out, rowMeans(matrix[,z:(z+n_meanrows-1)]))
  }
  return(out)
}

mat <- matrix(rnorm(15*14, 1,10), ncol=15, nrow=14)

rowlingRowMeans(mat, 6)