我有以下簡化問題:如何執行的矩陣計算(例如協方差矩陣),用於不同等級因子可變的
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