gpt4 book ai didi

R data.table 在进行跨类别聚合时快速追加列总数的方法?

转载 作者:行者123 更新时间:2023-12-01 12:52:17 25 4
gpt4 key购买 nike

我经常发现自己在数据表聚合的底部添加了一个“总计”行。通常总数只是各列的总和。

这是我正在尝试做的一个简化示例:

DT = data.table(t = rep(as.Date(c("2018-05-01", "2018-07-01"))), 
x=rep(c("b","a","c", "d"),each=5), y=rep(c(1,3,6, 5, 5), 4), v=1:20)

DT.agg <- DT[, .(y = sum(y), v = sum(v)), by = .(t, x)]
DT.agg

DT.agg
# t x y v
# 1: 2018-05-01 b 12 9
# 2: 2018-07-01 b 8 6
# 3: 2018-07-01 a 12 24
# 4: 2018-05-01 a 8 16
# 5: 2018-05-01 c 12 39
# 6: 2018-07-01 c 8 26
# 7: 2018-07-01 d 12 54
# 8: 2018-05-01 d 8 36

现在问题来了。有没有一种快速有效的方法可以在此聚合中添加“总计”?我经常这样做,当以交互方式运行 R 并快速探索多个数据聚合时(但它需要多行代码,令人讨厌):

DT.tot <- DT[, .(x = "total", y = sum(y), v = sum(v)), by = t]
DT.agg2 <- rbind(DT.agg, DT.tot)

DT.agg2
# t x y v
# 1: 2018-05-01 b 12 9
# 2: 2018-07-01 b 8 6
# 3: 2018-07-01 a 12 24
# 4: 2018-05-01 a 8 16
# 5: 2018-05-01 c 12 39
# 6: 2018-07-01 c 8 26
# 7: 2018-07-01 d 12 54
# 8: 2018-05-01 d 8 36
# 9: 2018-05-01 total 40 100
# 10: 2018-07-01 total 40 110

是否有一种快速或更智能的方法来获取 DT.agg2 而无需显式构建 total 和 rbinding,我可能忽略了这一点?

我想要总数,因为最终我想计算这样的事情,y 的百分比在类别“a”中,等等:

DT.c <- dcast(DT.agg2, t ~ x, value.var = c("y", "v"))
#
DT.c[, pct_y_a := y_a / y_total]

DT.c
# t y_a y_b y_c y_d y_total v_a v_b v_c v_d v_total pct_y_a
#1: 2018-05-01 8 12 12 8 40 16 9 39 36 100 0.2
#2: 2018-07-01 12 8 8 12 40 24 6 26 54 110 0.3

最佳答案

rollup 计算不同级别分组的聚合,产生多个总计(/小计):

library(data.table)  # I'm using version 1.11.4
rollup(DT, j = lapply(.SD, sum), by = c("t", "x"))
# t x y v
# <Date> <char> <num> <int>
# 1: 2018-05-01 b 12 9
# 2: 2018-07-01 b 8 6
# 3: 2018-07-01 a 12 24
# 4: 2018-05-01 a 8 16
# 5: 2018-05-01 c 12 39
# 6: 2018-07-01 c 8 26
# 7: 2018-07-01 d 12 54
# 8: 2018-05-01 d 8 36
# 9: 2018-05-01 <NA> 40 100 # <- total for date 2018-05-01
#10: 2018-07-01 <NA> 40 110 # <- total for date 2018-07-01
#11: <NA> <NA> 80 210 # <- grand total

rollup 的帮助文件指出:

Calculate aggregates at various levels of groupings producing multiple (sub-)totals. Reflects SQLs GROUPING SETS operations.

关于R data.table 在进行跨类别聚合时快速追加列总数的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51421187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com