基于含特定字符串的条件使用Dplyr对数据进行分组处理
实现方案
你可以直接使用dplyr的group_by+summarise组合实现需求,核心逻辑是判断分组内是否存在Type为R的值,存在就返回R,否则返回O。
构造示例数据集
library(dplyr) df <- tribble( ~Year, ~ID, ~Type, 2000, 1, "O", 2000, 1, "O", 2000, 1, "O", 2000, 1, "O", 2000, 1, "R", 2017, 5, "O", 2017, 5, "O", 2000, 8, "R", 2000, 8, "O", 2002, 8, "O" )
分组计算代码
result <- df %>% group_by(Year, ID) %>% summarise(Type = ifelse(any(Type == "R"), "R", "O"), .groups = "drop")
结果验证
运行后得到的输出和预期完全一致:
| Year | ID | Type |
|---|---|---|
| 2000 | 1 | R |
| 2000 | 8 | R |
| 2002 | 8 | O |
| 2017 | 5 | O |
代码说明
group_by(Year, ID)按指定的两个字段完成分组any(Type == "R")判断当前分组内是否存在Type为R的记录,返回布尔值ifelse根据判断结果返回对应的Type取值.groups = "drop"参数用来取消输出结果的分组状态,避免后续操作出现不必要的分组提示。
内容的提问来源于stack exchange,提问作者PCRL
相关产品推荐
相关产品推荐

