2016-06-07 105 views
0

我有以下简化问题:如何执行的矩阵计算(例如协方差矩阵),用于不同等级因子可变的

temp <- matrix(rnorm(900), ncol = 3) 
lev <- as.factor(rep(c("a", "b", "c"), each = 100)) 
dfr <- data.frame(lev = lev, temp = temp) 

我想calcualte方差 - 协方差矩阵的每个的三个层次。我如何有效地做到这一点?

非常感谢花时间阅读(并希望回答)我的问题!

+0

这是不是你想要做什么? 'lapply(split(dfr,dfr $ lev),function(x)cov(x [,-1]))' – Gopala

回答

0

没关系。我找到了解决办法:

lapply(split(dfr, dfr$lev), function(x) var(x[,-1])) 
0

我们可以使用data.table

library(data.table) 
setDT(dfr)[, as.list(var(.SD)), lev] 

或者使用bybase R

by(dfr[-1], list(dfr[,1]), FUN = var) 
+0

但是对于更大的矩阵,格式化难以遵循。虽然谢谢! – user3236841

+0

@ user3236841所以你想要一个矩阵列表?我不确定预期产出的格式 – akrun