gpt4 book ai didi

r - data.table 中使用和不使用分组变量的聚合计算

转载 作者:行者123 更新时间:2023-12-02 09:31:45 25 4
gpt4 key购买 nike

我正在按组和整体级别生成一些汇总统计数据。

(注意:总体统计数据不一定来自组级统计数据。加权平均值可以,但中位数不行。)

到目前为止,我的解决方法在摘要统计数据或原始数据的副本上使用 rbindlist,如下所示:

library(data.table)
data(iris)

d <- data.table(iris)

# Approach 1)

rbindlist(list(d[, lapply(.SD, median), by=Species, .SDcols=c('Sepal.Length','Petal.Length')],
d[, lapply(.SD, median), .SDcols=c('Sepal.Length', 'Petal.Length')]),
fill=TRUE)
# Species Sepal.Length Petal.Length
# 1: setosa 5.0 1.50
# 2: versicolor 5.9 4.35
# 3: virginica 6.5 5.55
# 4: NA 5.8 4.35

# Approach 2)

d2 <- rbindlist(list(copy(d), copy(d[,Species:="Overall"]) ) )
d2[, lapply(.SD, median), by=Species, .SDcols=c('Sepal.Length', 'Petal.Length')]
# Species Sepal.Length Petal.Length
# 1: setosa 5.0 1.50
# 2: versicolor 5.9 4.35
# 3: virginica 6.5 5.55
# 4: Overall 5.8 4.35

第一种方法似乎更快(避免复制)。

第二种方法允许我使用标签“Overall”而不是 NA 填充,如果某些记录缺少“Species”值(在第一种方法中会导致分为两行 NA 物种。)

我还应该考虑其他解决方案吗?

最佳答案

我想我通常会这样做:

cols = c('Sepal.Length','Petal.Length')

rbind(d[, lapply(.SD, median), by=Species, .SDcols=cols],
d[, lapply(.SD, median), .SDcols=cols][, Species := 'Overall'])
# Species Sepal.Length Petal.Length
#1: setosa 5.0 1.50
#2: versicolor 5.9 4.35
#3: virginica 6.5 5.55
#4: Overall 5.8 4.35

关于r - data.table 中使用和不使用分组变量的聚合计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32508653/

25 4 0