R语言基于列NA缺失值数量对数据行分组的实现问题
R语言按行NA缺失情况分组解决方案
问题根因
你原有代码逻辑无问题,运行结果不符合预期是列名大小写不匹配导致:数据集第三列命名为Follow_up3(首字母u小写),但case_when判断逻辑中写的是Follow_Up3(首字母U大写),判定条件全部不触发,导致Group列生成NA。
方案1:按缺失位置分组(匹配你定义的7类分组规则)
修正列名后的可运行代码如下:
library(dplyr) my_data <- data.frame( Follow_Up1 = c(100, 200, 300, 1, NA, NA, 50, 10, 5, NA), Follow_Up2 = c(NA, 500 ,400,380,NA, NA, 500, 780,NA,500), Follow_up3 = c(NA, NA, 1000, 800,NA, 1200, 1100, 1200, 990, NA) ) follow_Up <- my_data %>% mutate(Group = case_when( is.na(Follow_Up1) & is.na(Follow_Up2) & is.na(Follow_up3) ~ 1, !is.na(Follow_Up1) & is.na(Follow_Up2) & is.na(Follow_up3) ~ 2, is.na(Follow_Up1) & !is.na(Follow_Up2) & is.na(Follow_up3) ~ 3, !is.na(Follow_Up1) & !is.na(Follow_Up2) & !is.na(Follow_up3) ~ 4, !is.na(Follow_Up1) & !is.na(Follow_Up2) & is.na(Follow_up3) ~ 5, is.na(Follow_Up1) & is.na(Follow_Up2) & !is.na(Follow_up3) ~ 6, !is.na(Follow_Up1) & is.na(Follow_Up2) & !is.na(Follow_up3) ~ 7 ))
运行后除你提供的期望输出第10行标注错误(第10行仅Follow_Up2非空,对应分组3,不是2),其余结果完全匹配。
方案2:简化版按NA数量分组(仅按缺失个数分3类)
无需逐一枚举判定条件,代码更简洁易维护,适合列数较多的场景:
follow_Up_simple <- my_data %>% # 统计每一行随访列的NA数量 mutate(na_count = rowSums(is.na(pick(starts_with("Follow")))), Group = case_when( na_count == 1 ~ "1个缺失", na_count == 2 ~ "2个缺失", na_count == 3 ~ "3个缺失" ))
内容的提问来源于stack exchange,提问作者Vicky_Sch
相关产品推荐
相关产品推荐

