在R中根据NA数量分类变量的两种场景实现方法问询
R数据处理场景解决方案
场景1:判断指定16列是否全为NA,生成新变量x1
你原代码里的df[cols] == NA是错误写法——NA和任何值做比较都会返回NA,无法正确统计NA数量。修正后的写法有两种:
方法1:用rowSums + is.na
cols <- 1:16 df %>% mutate(x1 = ifelse(rowSums(is.na(.[cols]), na.rm = TRUE) == 16, "Yes", "No"))
方法2:用dplyr的if_all(更直观,需dplyr 1.0及以上版本)
cols <- 1:16 df %>% mutate(x1 = ifelse(if_all(cols, is.na), "Yes", "No"))
场景2:判断指定12个变量是否至少存在1个NA
用dplyr的if_any函数可以直接实现,它会检查指定列中是否有任意一行满足条件:
# 先定义目标列,可换成具体列名比如c("var1", "var2", ...) cols_12 <- 1:12 df %>% mutate(has_na = ifelse(if_any(cols_12, is.na), "Yes", "No"))
如果用base R写法:
df$has_na <- ifelse(rowSums(is.na(df[cols_12])) > 0, "Yes", "No")
内容的提问来源于stack exchange,提问作者Lili
相关产品推荐
相关产品推荐

