计算特定行数之间的每列中的方差

时间:2015-10-19 16:53:41

标签: r variance

我想计算矩阵每列的方差,但必须每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是列的变量。 在同一矩阵中的7行后,我必须再次计算方差,删除NA。矩阵的维数为266x107。

我尝试使用boa包中的colVars,但该命令计算整个列的方差。

2 个答案:

答案 0 :(得分: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)]

答案 1 :(得分: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];