2017-08-09 165 views
1

我需要找到每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])) })) 

请帮助。提前致谢。

+0

做一个罗林的意思即'rollmean'从'动物园' – akrun

+0

是滚动的意思。 – Pradnya

回答

3

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

library(zoo) 
t(apply(df1, 1, function(x) rollmean(x, 6))) 
2

使用基础R这样做:

n=6 
    d=lapply(1:(ncol(data)-(n-1)),function(x) x:(x+n-1)) 
    sapply(d,function(w) rowMeans(data[,w])) 
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)