You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何删除指定多列均为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 17:06:18