如何用for循环简化多列NA值排查,找出对应国家与年份
批量排查数据框中各变量的NA值对应国家与年份
不用再重复写几十遍代码,下面两种方法可以帮你批量处理40多个变量,快速找出每个变量的NA值对应的国家和年份:
方法一:基础R的for循环
适合不想额外加载包的场景,逻辑清晰直观:
# 先定义要检查的变量(排除ccode、stateName、year这些标识列) vars_to_check <- setdiff(colnames(node.all.final), c("ccode", "stateName", "year")) # 循环遍历每个变量,输出NA值信息 for(var in vars_to_check) { cat("=== 变量", var, "的NA值信息 ===\n") # 筛选该变量为NA的行 na_rows <- node.all.final[is.na(node.all.final[[var]]), ] if(nrow(na_rows) > 0) { cat("存在NA的国家:", paste(unique(na_rows$stateName), collapse = ", "), "\n") cat("对应年份:", paste(na_rows$year, collapse = ", "), "\n\n") } else { cat("该变量无NA值\n\n") } }
方法二:tidyverse 高效处理(推荐)
用tidyverse工具链可以把结果整理成结构化的数据框,方便后续查看或导出:
# 先加载需要的包 library(dplyr) library(tidyr) # 一键生成所有变量的NA值汇总表 na_summary <- node.all.final %>% # 把宽数据转成长格式,按变量分组 pivot_longer(cols = -c(ccode, stateName, year), names_to = "变量名", values_to = "变量值") %>% # 筛选出有NA值的行 filter(is.na(变量值)) %>% # 按变量分组汇总信息 group_by(变量名) %>% summarise( 存在NA的国家 = paste(unique(stateName), collapse = ", "), 对应年份 = paste(year, collapse = ", "), NA值总数量 = n() ) # 查看最终汇总结果 print(na_summary)
内容的提问来源于stack exchange,提问作者Jeffery Wang
相关产品推荐
相关产品推荐

