R语言分组新增列标识组内是否存在满足指定条件的观测
问题原因
你当前的代码是对分组内的每一行单独判断Dead列的取值,没有对组内所有行的结果做聚合,所以输出的affected列和Dead列完全一致,没有实现按组统一赋值的需求。
正确实现代码
只需要在判断时加入any()函数对组内结果做聚合即可,针对大数据集也可以正常运行:
test1 <- LargeSet %>% group_by(Group_ID) %>% mutate(affected = as.integer(any(Dead >= 1, na.rm = TRUE)))
如果需要保留case_when的写法也可以调整为:
test1 <- LargeSet %>% group_by(Group_ID) %>% mutate(affected = case_when( any(Dead >= 1, na.rm = TRUE) ~ 1, TRUE ~ 0 ))
代码说明
any(Dead >= 1)会对当前分组内所有行的Dead值做判断,只要存在至少1条满足Dead >= 1的记录,就返回TRUE,否则返回FALSEas.integer()会自动把逻辑值TRUE/FALSE转为1/0,符合输出要求- 加入
na.rm = TRUE是为了避免组内存在NA值时判断结果返回NA,如果数据集没有缺失值可以去掉这个参数。
内容的提问来源于stack exchange,提问作者user17208995
相关产品推荐
相关产品推荐

