You need to enable JavaScript to run this app. R语言基于列NA缺失值数量对数据行分组的实现问题
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 15:06:04