R语言如何对数据框列表列中的唯一值进行分组统计?
R嵌套列表列按单个元素分组统计的实现方法
核心思路
- 嵌套列表列无法直接按单个元素分组,需要先将列表展开为「每行对应1个患者+1个手术类型」的长结构,再执行分组汇总
- 不需要额外为每个手术类型新增标记列,仅需1行展开代码即可实现后续所有分组分析需求
可直接运行的实现代码(tidyverse方案)
library(tidyverse) # 展开列表列后分组统计 df %>% # 将procedures列表列拆分为长格式,每个手术类型单独占一行 unnest_longer(procedures) %>% # 按单个手术类型分组 group_by(procedures) %>% # 统计对应患者人数,如需分析其他结局指标可在此新增统计逻辑 summarise(患者人数 = n())
运行返回结果示例
| procedures | 患者人数 |
|---|---|
| 1 | 4 |
| 2 | 3 |
| 3 | 3 |
| 4 | 2 |
| 5 | 3 |
基础包实现方案(无需加载第三方包)
如果不想依赖tidyverse,也可以用基础R函数实现同等效果:
# 获取所有唯一手术类型 unique_proc <- sort(unique(unlist(df$procedures))) # 遍历统计每个手术的患者数 proc_count <- sapply(unique_proc, function(p) { sum(sapply(df$procedures, function(x) p %in% x)) }) # 转为数据框查看结果 data.frame(手术类型 = unique_proc, 患者人数 = proc_count)
原代码失效原因说明
之前使用group_by(procedures)统计无效,是因为该语法会把每个完整的手术列表作为分组依据,只有手术组合完全一致的患者才会被分到同一组,自然无法得到单个手术类型的统计结果。
内容的提问来源于stack exchange,提问作者r_joseph
相关产品推荐
相关产品推荐

