在R语言中删除数据框中包含1个以上NA值的列
解决方案
基础R实现
直接通过计算每列的NA数量完成筛选:
# 统计每列的NA个数 na_per_col <- colSums(is.na(data)) # 保留NA个数≤1的列(ID列无NA,自动保留) filtered_data <- data[, na_per_col <= 1]
执行后得到的结果:
ID Col1 Col3 1 Per1 1 3 2 Per2 2 NA 3 Per3 NA 5
tidyverse/dplyr实现
如果习惯用tidyverse语法,用dplyr的select()配合where()更简洁:
library(dplyr) filtered_data <- data %>% select(where(~ sum(is.na(.x)) <= 1))
原理说明
is.na(data)会生成一个逻辑矩阵,标记出所有NA的位置colSums(is.na(data))对每列的NA标记求和,得到每列的NA总数- 筛选条件
<=1会自动排除NA数量超过1的列(即Col2和Col4),保留符合要求的列
内容的提问来源于stack exchange,提问作者Joe94
相关产品推荐
相关产品推荐

