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

如何在R的data.table中按列输出分位数等汇总统计结果?

用data.table直接生成带分位数列的汇总表

你可以通过合并基础统计量的list和分位数的list,在一次汇总操作中直接得到目标格式,不需要拆分后再合并:

library(data.table)

# 创建示例数据
dt <- data.table(ID = rep(1:3, each = 100),
                 val = rnorm(300, 100, sd = 20))

# 定义需要的分位数
percs <- c(0.05, 0.10, 0.50, 0.75, 0.90, 0.95)

# 一次汇总得到所有列
dt[, c(
  .(mean = mean(val, na.rm = TRUE),
    Median = median(val, na.rm = TRUE),
    min = min(val, na.rm = TRUE),
    max = max(val, na.rm = TRUE)),
  as.list(quantile(val, probs = percs, na.rm = TRUE))
), by = ID]

优化:自定义分位数列名

如果想让分位数列的名字更直观,可以先给分位数向量命名:

names(percs) <- paste0("p", percs * 100) # 生成p5、p10这类清晰的列名

dt[, c(
  .(mean = mean(val, na.rm = TRUE),
    Median = median(val, na.rm = TRUE),
    min = min(val, na.rm = TRUE),
    max = max(val, na.rm = TRUE)),
  as.list(quantile(val, probs = percs, na.rm = TRUE))
), by = ID]

为什么最初的方法格式不对

你最初的写法里,把as.list(quantile(...))直接放在.()中,相当于把这个list作为一个嵌套元素传入,data.table会将嵌套的list展开为多行。而用c()将基础统计量的list和分位数的list合并成平级的list后,data.table会把每个元素都解析为单独的列,一次就能得到符合要求的宽表格式。

内容的提问来源于stack exchange,提问作者TBP

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 23:15:06