R语言如何仅当满足另一列指定条件时删除含NA的行
问题根因
你的代码存在两个核心错误:
- 元素匹配逻辑错误:判断元素是否属于指定集合不能用
!=和集合向量直接比较,这种写法会触发R的短向量循环匹配规则,你收到的长度不匹配警告就是因此产生,匹配结果完全不符合预期。 - 筛选逻辑写反:你写的
& !is.na(Site)要求所有保留行的Site列都不能为NA,自然会删掉所有Site为NA的行,和你的需求相悖。
正确代码
你要实现的逻辑是「仅删除同时满足Site为NA、Category属于IV/IVA/IVB的行」,等价于保留所有不满足上述两个条件同时成立的行,代码写法如下:
# 假设你的数据框名为df library(dplyr) df <- df %>% filter(!(is.na(Site) & Category %in% c("IV", "IVA", "IVB")))
验证结果
用你提供的示例数据运行上述代码后,保留的结果如下:
| Category | Site |
|---|---|
| I | Hip |
| III | NA |
| IVB | Leg |
| II | Arm |
完全符合需求,Category为III、Site为NA的行被保留,只有同时满足两个删除条件的IV、IVA行被删除。
内容的提问来源于stack exchange,提问作者Becky
相关产品推荐
相关产品推荐

