如何删除指定多列均为NA的数据行?
解决方案:删除指定多列全为NA的数据行
下面两种方法都能实现你的需求——仅删除value2、value3、value4三列全部为NA的行,保留其他含部分NA或其他列有NA的行:
方法1:用dplyr包的filter() + if_all()
借助dplyr的if_all()可以批量检查指定列的条件,再通过取反筛选出符合要求的行:
library(dplyr) # 构造示例数据 sample <- c("sample1", "sample2", "sample3", "sample4", "sample5") value1<- c("A", "B", "A", NA, "C") value2 <- c(NA, 5, 7, NA, NA) value3 <- c(13, NA, 7, NA, NA) value4 <- c(11, 4, NA, 9, NA) myinput <- data.frame(sample, value1, value2, value3, value4) # 执行筛选 result <- myinput %>% filter(!if_all(c(value2, value3, value4), is.na)) # 查看结果 result
运行后输出:
sample value1 value2 value3 value4 1 sample1 A NA 13 11 2 sample2 B 5 NA 4 3 sample3 A 7 7 NA 4 sample4 NA NA NA 9
方法2:用基础R的rowSums()
通过计算指定列中NA的数量,判断是否全为NA,再筛选行:
# 构造示例数据 sample <- c("sample1", "sample2", "sample3", "sample4", "sample5") value1<- c("A", "B", "A", NA, "C") value2 <- c(NA, 5, 7, NA, NA) value3 <- c(13, NA, 7, NA, NA) value4 <- c(11, 4, NA, 9, NA) myinput <- data.frame(sample, value1, value2, value3, value4) # 执行筛选:保留指定列不全为NA的行 result <- myinput[rowSums(is.na(myinput[, c("value2", "value3", "value4")])) != 3, ] # 查看结果 result
运行后输出和方法1一致。
内容的提问来源于stack exchange,提问作者Nereus
相关产品推荐
相关产品推荐

