使用%in%过滤数据框列后得到空对象,求助排查与解决
问题排查与解决方案
核心问题
你代码里的D是一个tibble(数据框),但%in%运算符需要的是一维向量,不是数据框对象。直接把整个数据框传给%in%,程序会把它当成嵌套结构处理,自然匹配不到ID列里的单个字符值,所以返回0条观测。
修正方案
有两种简单的解决方式:
方式1:提取D中的列向量
从tibble D里取出存储ID的列,变成一维向量再匹配:
ID <- rep(LETTERS, length.out = 21, each = 3) w <- sample(1:100, 21) d <- c("D", "E") tib <- tibble(ID, w) D <- tibble(d) # 用$提取列向量 check <- filter(tib, ID %in% D$d)
方式2:直接使用原始向量
既然你已经定义了d <- c("D", "E"),可以直接用这个向量来过滤,没必要绕到D数据框:
check <- filter(tib, ID %in% d)
额外:tidyverse风格提取
如果你习惯用tidyverse的函数,也可以用pull()来提取列向量:
library(dplyr) # 确保加载dplyr check <- filter(tib, ID %in% pull(D))
内容的提问来源于stack exchange,提问作者Gilrob
相关产品推荐
相关产品推荐

