Предполагается, что мои данные содержат 3 категории. Я хочу найти матрицу ковариации каждой категории и ожидать, что return будет массивом.Как найти матрицу ковариации по категориям в data.table в R
set.seed(7)
x <- rbind(cbind(rnorm(120,-1,0.1), rnorm(120,-0.5,0.1)),
cbind(rnorm(120,-0.4,0.1), rnorm(120,0,0.1)),
cbind(rnorm(120,.2,0.1), rnorm(120,0,0.1)))
lab <- c(rep(1, 120), rep(2, 120), rep(3, 120))
newx <- cbind(x, lab = lab)
s <- sapply(1:3, function(k){ var(newx[lab == k, -3]) })
dim(s) <- c(2,2,3)
возвращение,
, , 1
[,1] [,2]
[1,] 0.008880447 -0.001116058
[2,] -0.001116058 0.009229061
, , 2
[,1] [,2]
[1,] 0.012193536 -0.001217923
[2,] -0.001217923 0.009391710
, , 3
[,1] [,2]
[1,] 0.010752319 0.0
[2,] 0.0.008226595
Я знаю, как сделать это с помощью sapply
, но если я хочу использовать data.table
, как я могу это сделать?
Я пробовал:
library(data.table)
dt <- data.table(newx)
dt[,lapply(.SD, var), by = lab]
, но она не обеспечивает возврат как я ожидал.
какой мощность вы хотите? таблица данных - это кадр данных, а не 3-мерный массив. – rawr
@rawr. Я хочу получить следующий массив, содержащий ковариацию каждой категории. В этом случае у меня есть 3 категории, поэтому я ожидаю наличие 3 ковариационных матриц. – newbie