如何用dplyr基于双变量条件删除R数据框指定行?
问题原因分析
你原来的filter条件逻辑组合错误,导致所有day=157的行都被过滤。核心问题在于:
- 在
dplyr::filter()中,逗号代表逻辑与(AND),你的代码等价于要求同时满足:!id==166 & !day==157且!id==206 & !day==157且!id==210 & !day==157 - 只要
day=157,!day==157就为FALSE,整个条件链直接不成立,因此所有day=157的行都被排除了。
正确写法
我们需要排除的是**同时满足day=157且id属于{166,206,210}**的行,直接对这个复合条件取反即可:
df %>% filter(!(day == 157 & id %in% c(166, 206, 210)))
也可以用逻辑或的等价写法(可读性稍弱):
df %>% filter(day != 157 | !(id %in% c(166, 206, 210)))
验证结果
运行正确代码后,day=157中仅id为166、206、210的3行被删除,其余6行(id=149、188、224、151、186、226)会保留,最终结果共24行。
内容的提问来源于stack exchange,提问作者Marta Román
相关产品推荐
相关产品推荐

