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

基于条件聚合统计DataTable列:按treaty分组计算性别占比与平均年龄

使用data.table实现分组聚合计算

原始数据

df <- structure(list(treaty = c("abc", "de", "abc", "de", "de"), 
                     SEX1 = c("M", "F", "F", "M", "F"), 
                     age = c(20, 30, 40, 50, 70)), 
                class = "data.frame", row.names = c(NA, -5L))

需求

  • 按treaty字段分组
  • 计算每组中M、F的占比(以组内总数量为基数,输出分数格式)
  • 计算每组的平均年龄
  • 输出指定格式的结果:
treatyProp (M)Prop (F)Avg Age
abc1/21/230
de1/32/350

解决方案

使用data.table包实现大数据量下的高效分组计算,代码如下:

library(data.table)

# 转换为data.table对象
dt <- as.data.table(df)

# 分组聚合并整理结果
result <- dt[, .(
  total = .N,
  count_M = sum(SEX1 == "M"),
  count_F = sum(SEX1 == "F"),
  avg_age = mean(age)
), by = treaty][, .(
  treaty,
  `Prop (M)` = paste(count_M, total, sep = "/"),
  `Prop (F)` = paste(count_F, total, sep = "/"),
  `Avg Age` = avg_age
)]

# 查看最终结果
print(result)

代码说明

  • as.data.table(df):将普通data.frame转为data.table,适配大数据量操作
  • by = treaty:指定按treaty字段分组
  • .N:直接获取每组的总行数(组内总样本量)
  • sum(SEX1 == "M"):统计每组中男性的数量,同理统计女性数量
  • mean(age):计算每组的平均年龄
  • 二次索引[, .(...)]:将统计出的数量转换为分数格式字符串,同时整理成需求的列结构

输出结果

运行代码后将得到如下结果:

treaty Prop (M) Prop (F) Avg Age
1:    abc      1/2      1/2      30
2:     de      1/3      2/3      50

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 01:13:23