使用dplyr::filter过滤数据框列表未生效的问题排查
问题出在两个关键地方!
让我一步步给你拆解:
1. 你用了一个R不认识的运算符 %!in%
R的base包和dplyr里都没有内置%!in%这个反向匹配运算符。除非你之前自己手动定义过它(比如写了%!in% <- function(x,y) !x %in% y),否则R会把它当成一个未知的符号,这时候返回的逻辑判断结果大概率是长度为1的TRUE——filter会把这个单一值循环应用到所有行,相当于保留每一行,所以你的数据框完全没变。
2. 条件逻辑和你的需求搞反了
你明确说要「保留id在include_vector中的行」,但你写的条件id %!in% include_vector(就算这个运算符是对的),表达的是「保留id不在include_vector中的行」,完全和需求相反!
给你两个正确的代码版本:
版本1:保留id在include_vector中的行(你的真实需求)
lapply(dflist, function(x){dplyr::filter(x, id %in% include_vector)})
版本2:如果是不小心写反,想要剔除id在include_vector中的行
lapply(dflist, function(x){dplyr::filter(x, !(id %in% include_vector))})
另外可以额外检查下:确保include_vector的类型和数据框里id列的类型一致(比如都是字符型或都是数值型),否则%in%可能会因为类型不匹配返回全FALSE,也会导致过滤无效哦。
内容的提问来源于stack exchange,提问作者AadiR
相关产品推荐
相关产品推荐

