You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在data.table末尾添加列求和的新行?

在data.table结果末尾添加求和行的实现方法

原操作与结果

你最初的筛选分组计算代码:

dt[x1 == 1, .N, by = c("Group1")][, 
  "%" := round(N /sum(N) * 100, 0)]

得到的初始结果:

Group1 N  %
1:     2 6 40
2:     1 6 40
3:     3 2 13
4:     5 1  7

你需要在表格末尾追加一行求和数据,期望效果:

Group1 N  %
1:     2 6 40
2:     1 6 40
3:     3 2 13
4:     5 1  7  
ColSum: -- 15 100

实现方法

可以通过构造求和行再合并的方式完成,下面提供两种写法:

分步写法(清晰直观)

# 先保存初始计算结果
result <- dt[x1 == 1, .N, by = c("Group1")][, 
  "%" := round(N / sum(N) * 100, 0)]

# 构造求和行:Group1设为"--",N列取总和,%列取总和(若要确保显示100,可直接赋值100)
sum_row <- data.table(
  Group1 = "--",
  N = sum(result$N),
  `%` = sum(result$`%`)
)

# 合并结果并自定义行标识
final_result <- rbindlist(list(result, sum_row))
print(final_result, row.names = c(1:nrow(result), "ColSum:"))

链式写法(一步到位)

dt[x1 == 1, .N, by = c("Group1")][, 
  "%" := round(N / sum(N) * 100, 0)][, 
  rbind(.SD, .(Group1 = "--", N = sum(N), `%` = sum(`%`)))] |>
  print(row.names = c(1:(.N-1), "ColSum:"))

补充说明

  • 由于%列是四舍五入后的结果,求和可能出现微小误差(示例中刚好凑成100),如果需要强制显示100,直接把sum(result$%)替换为100即可
  • 通过print的row.names参数自定义最后一行的标识,就能实现你要的ColSum:效果

内容的提问来源于stack exchange,提问作者dapple-putt-poultry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 01:20:31