2015-10-19 30 views
0

我要计算一个矩阵的每列中的差异,但方差必须每7行计算,例如计算方差在一定的行数之间的每个柱

9.8 4.5 0.9 7.8..... 
5.4 9.8 1.2 3.5.... 
3.1 2.6 9.5 7.1..... 
3.4 NA 1.1 1.5..... 
7.9 5.9 3.4 2.6..... 
4.5 5.1 7.4 NA..... 
VAR VAR VAR VAR 

VAR是的variace该列。 在同一矩阵中的7行之后,我必须再次计算方差,去除NA。矩阵的维度是266x107。

我试着用boa软件包中的colVars,但该命令计算整个列的差异。

回答

0

aggregate()是这类任务的强大功能,无需另包在这种情况下:

lolzdf <- matrix(rnorm(266*107), 266, 107) 
    n<-7 
    aggregate(lolzdf,list(rep(1:(nrow(lolzdf)%/%n+1),each=n,len=nrow(lolzdf))),var,na.rm=TRUE)[-1]; 
1

这里是data.table方法:

require(data.table) 
# Create the data table 
dt <- as.data.table(matrix(rnorm(266*107), 266, 107)) 
# For every 7 rows, calculate variance of each column, ignoring NAs 
dt[, lapply(.SD, var, na.rm=T), by=gl(ceiling(266/7), 7, 266)] 
+0

它的工作原理pefectly。非常感谢 –

+0

我的答案稍慢。 – Ouistiti

+0

我试过了,但是我的R表示它没有'data.table'包。 – user177196