如何在数据 table 的单元格中存储均值向量和协方差矩阵?
How to store mean vectors and covariance matrices in cells of a data table?
考虑一个具有两个数字特征和一个分类特征的数据 table。我想将此数据 table 转换为新数据 table。此数据的每一行 table 应对应于分类特征的一个值。此外,它应该包含一个列,其中包含每个分类值的数字特征产生的均值向量,以及一个包含协方差矩阵的列。此外,只能使用包含引用数字特征的列名称的对象。
似乎必须为此使用列表,例如 R - store a matrix into a single dataframe cell。但是,这些信息对我的帮助还不够。
这是一个例子:
library(data.table)
set.seed(42)
a <- sample(1:3, 10, TRUE)
b <- rnorm(10)
d <- rpois(10, 3)
data <- data.table(a, b, d)
bd <- c("b", "d")
dat <- data[,
.(mu = mean(get(bd)),
sigma = get(cov(bd))),
by = a]
我想要的是dat
有三行,每一行对应a
中的一个值。此数据 table 还应包含一个包含三个长度为 2 的向量的列和一个包含三个 2x2 矩阵的列。
我们可以使用 mget
而不是 get
,因为 get
用于返回单个对象值,而 mget
用于返回一个或多个
data[, lapply(mget(bd), function(x) mean(x)), by = a]
如果我们需要 list
列
data[, .(mu = .(as.list(lapply(mget(bd), function(x) mean(x))))), by = a]
如果我们想要两列,即 cov
data[, .(mu = .(sapply(mget(bd), function(x) mean(x))),
sigma = .(cov(do.call(cbind, mget(bd)))[2])), by = a]
a mu sigma
1: 1 0.2353046,2.2000000 -2.131663
2: 2 0.1876238,3.3333333 2.062627
3: 3 0.9299794,1.5000000 0.1445644
考虑一个具有两个数字特征和一个分类特征的数据 table。我想将此数据 table 转换为新数据 table。此数据的每一行 table 应对应于分类特征的一个值。此外,它应该包含一个列,其中包含每个分类值的数字特征产生的均值向量,以及一个包含协方差矩阵的列。此外,只能使用包含引用数字特征的列名称的对象。
似乎必须为此使用列表,例如 R - store a matrix into a single dataframe cell。但是,这些信息对我的帮助还不够。
这是一个例子:
library(data.table)
set.seed(42)
a <- sample(1:3, 10, TRUE)
b <- rnorm(10)
d <- rpois(10, 3)
data <- data.table(a, b, d)
bd <- c("b", "d")
dat <- data[,
.(mu = mean(get(bd)),
sigma = get(cov(bd))),
by = a]
我想要的是dat
有三行,每一行对应a
中的一个值。此数据 table 还应包含一个包含三个长度为 2 的向量的列和一个包含三个 2x2 矩阵的列。
我们可以使用 mget
而不是 get
,因为 get
用于返回单个对象值,而 mget
用于返回一个或多个
data[, lapply(mget(bd), function(x) mean(x)), by = a]
如果我们需要 list
列
data[, .(mu = .(as.list(lapply(mget(bd), function(x) mean(x))))), by = a]
如果我们想要两列,即 cov
data[, .(mu = .(sapply(mget(bd), function(x) mean(x))),
sigma = .(cov(do.call(cbind, mget(bd)))[2])), by = a]
a mu sigma
1: 1 0.2353046,2.2000000 -2.131663
2: 2 0.1876238,3.3333333 2.062627
3: 3 0.9299794,1.5000000 0.1445644