我想计算矩阵每列的方差,但必须每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,但该命令计算整个列的方差。
答案 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];