如何按年份合并tibble指定行并求和重命名?
解决方法:合并指定行并按年份求和
方法一:使用tidyverse(dplyr)
因为你用的是tibble,用dplyr的管道操作会更直观,步骤如下:
- 构造示例数据(已有数据可跳过):
library(tibble) library(dplyr) df <- tibble( Year = c(1969,1969,1969,1970,1970,1970,1971,1971,1971), Name = c("Alice","Bob","Charlie","Alice","Bob","Charlie","Alice","Bob","Charlie"), n = c(24,25,33,13,20,10,23,10,16) )
- 数据处理:
result <- df %>% # 将Bob和Charlie替换为Derek,保留Alice不变 mutate(Name = case_when( Name %in% c("Bob", "Charlie") ~ "Derek", TRUE ~ Name )) %>% # 按年份和新的Name分组,对n求和 group_by(Year, Name) %>% summarise(n = sum(n), .groups = "drop")
运行后得到的result就是目标表格:
# A tibble: 6 × 3 Year Name n <dbl> <chr> <dbl> 1 1969 Alice 24 2 1969 Derek 58 3 1970 Alice 13 4 1970 Derek 30 5 1971 Alice 23 6 1971 Derek 26
方法二:使用Base R
如果不想加载额外包,用base R也能实现:
# 先替换Name列 df$Name[df$Name %in% c("Bob", "Charlie")] <- "Derek" # 按Year和Name分组求和 result_base <- aggregate(n ~ Year + Name, data = df, sum)
之前尝试失败的可能原因
- 用
case_when时,可能没完成Name替换就直接聚合,导致分组逻辑错误; - 用
aggregate时,没有先将Bob和Charlie统一替换为Derek,无法正确合并目标行。
内容的提问来源于stack exchange,提问作者LostInHilbertSpace
相关产品推荐
相关产品推荐

