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

如何用dplyr统计各年龄存活人数并合并当前年龄ID计数

优化dplyr实现年龄存活数统计的方案

需求回顾

  • 从包含ID、Age、YearDied的数据集,统计每个年龄对应的SurvivorNumber:若某ID的Age为n,则该ID视为度过了1至n的所有年龄,需统计各年龄的总存活数
  • 同时将结果与各年龄的Current Number of IDs(当前该年龄的ID数量)合并

初始代码问题分析

你当前的代码存在大量冗余操作:重复调用group_by和case_when完全没有必要,count(Age)已经完成了按年龄分组计数,后续多次分组操作不会改变结果,反而降低代码效率和可读性。

优化实现方案

下面是更简洁高效的dplyr实现,核心思路是利用累计求和计算存活数,同时一步完成两个指标的合并:

# 1. 计算各年龄的当前ID数量,并确保Age为数值型以正确排序
current_df <- inputDf %>%
  # 若Age原本是字符型,先转换为数值型避免排序错误
  mutate(Age = as.numeric(Age)) %>%
  count(Age, name = "CurrentNumber") %>%
  arrange(Age)

# 2. 计算各年龄的存活数:对当前ID数从大到小累计求和
final_result <- current_df %>%
  arrange(desc(Age)) %>%
  mutate(SurvivorNumber = cumsum(CurrentNumber)) %>%
  arrange(Age) %>%
  # 整理列顺序,可按需调整
  select(Age, CurrentNumber, SurvivorNumber)

代码解释

  • CurrentNumber计算:count(Age)直接得到每个年龄对应的当前ID数量,重命名为CurrentNumber更直观
  • SurvivorNumber计算:先按Age降序排列,用cumsum累计求和——因为年龄为n的ID必然包含了所有1到n年龄的存活记录,累计求和后再升序排列,就得到每个年龄k对应的总存活数(所有年龄≥k的ID总数)
  • 如果数据集里有存活状态(YearDied为NA)的ID,只要Age字段是其当前年龄,上述逻辑依然适用,无需额外处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:37:17