R语言:分组求和后添加带自定义年龄名称的新行
解决方案:在R中给数据框添加分组求和的新行
核心思路
先按measure_name和cause_name分组计算val的总和,生成带指定age_name的新行数据框,再把它和原数据框行绑定即可。
完整代码示例
假设你的原始数据框名为df,包含measure_name、cause_name、age_name、val这几列,以下是可直接复用的代码:
library(dplyr) # 模拟一份和你结构类似的测试数据 df <- tibble( measure_name = rep(c("发病率", "患病率"), each = 3), cause_name = rep(c("疟疾", "HIV"), times = 3), age_name = c("1–4岁", "5–9岁", "1–4岁", "5–9岁", "1–4岁", "5–9岁"), val = c(10, 20, 15, 25, 8, 12) ) # 生成分组求和的新行 sum_rows <- df %>% group_by(measure_name, cause_name) %>% summarise( age_name = "1–9 years", # 直接指定新行的age_name值 val = sum(val), .groups = "drop" # 取消分组,避免后续合并出问题 ) # 合并原数据和新行 final_df <- bind_rows(df, sum_rows) # 查看最终结果 print(final_df)
关键细节说明
- 在
summarise步骤直接定义age_name为目标值,确保新行格式完全符合要求 .groups = "drop"是必须的,它会把分组后的结果转为普通数据框,方便后续和原数据合并bind_rows会自动匹配列名,就算原数据还有其他列,也能正常合并,缺失的列会自动补NA
针对你现有代码的调整
如果你已经写了分组求和的代码,只需要补加age_name的定义,再绑定数据就行:
# 假设你原来的求和代码是这样 # sum_vals <- df %>% group_by(measure_name, cause_name) %>% summarise(val = sum(val)) # 修改后 sum_vals <- df %>% group_by(measure_name, cause_name) %>% summarise( age_name = "1–9 years", val = sum(val), .groups = "drop" ) # 合并数据 final_df <- bind_rows(df, sum_vals)
内容的提问来源于stack exchange,提问作者Catalyst
相关产品推荐
相关产品推荐

