如何在dplyr中指定依赖分组变量的条件完成新列赋值
你可以通过添加group_by(ID)实现按ID分组计算,修改后的代码如下:
library(dplyr) a <- c("1001", "1001", "1002", "1002", "1002", "1003", "1004") b <- c("Red", "Blue", "Red", "Blue", "Blue", "Green", "Yellow") c <- c(NA, 1, NA, 1, 1, NA, NA) df <- data.frame("ID" = a, "Attribute1" = b, "Value" = c) df <- df %>% group_by(ID) %>% mutate(Attribute2 = case_when( Attribute1 %in% c("Red", "Green", "Yellow") ~ "Group 3", Attribute1 == "Blue" & sum(Value, na.rm = TRUE) < 2 ~ "Group 1", Attribute1 == "Blue" & sum(Value, na.rm = TRUE) >= 2 ~ "Group 2" )) %>% ungroup()
修改说明
- 新增
group_by(ID)指定按ID分组,后续mutate的计算逻辑会在每个ID的独立分组内运行 - 判断Blue的规则替换为分组内Value列的总和,添加
na.rm = TRUE忽略NA值,避免求和结果为NA - 合并了三个Attribute1对应Group3的判断逻辑,代码更简洁
- 处理完成后调用
ungroup()取消分组,避免后续对数据集的操作默认受分组规则影响
运行上述代码得到的结果与你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者VancityPlanner
相关产品推荐
相关产品推荐

