我有以下简化问题:如何执行的矩阵计算(例如协方差矩阵),用于不同等级因子可变的
temp <- matrix(rnorm(900), ncol = 3)
lev <- as.factor(rep(c("a", "b", "c"), each = 100))
dfr <- data.frame(lev = lev, temp = temp)
我想calcualte方差 - 协方差矩阵的每个的三个层次。我如何有效地做到这一点?
非常感谢花时间阅读(并希望回答)我的问题!
我有以下简化问题:如何执行的矩阵计算(例如协方差矩阵),用于不同等级因子可变的
temp <- matrix(rnorm(900), ncol = 3)
lev <- as.factor(rep(c("a", "b", "c"), each = 100))
dfr <- data.frame(lev = lev, temp = temp)
我想calcualte方差 - 协方差矩阵的每个的三个层次。我如何有效地做到这一点?
非常感谢花时间阅读(并希望回答)我的问题!
没关系。我找到了解决办法:
lapply(split(dfr, dfr$lev), function(x) var(x[,-1]))
我们可以使用data.table
library(data.table)
setDT(dfr)[, as.list(var(.SD)), lev]
或者使用by
从base R
by(dfr[-1], list(dfr[,1]), FUN = var)
但是对于更大的矩阵,格式化难以遵循。虽然谢谢! – user3236841
@ user3236841所以你想要一个矩阵列表?我不确定预期产出的格式 – akrun
这是不是你想要做什么? 'lapply(split(dfr,dfr $ lev),function(x)cov(x [,-1]))' – Gopala