R 没有适用于'的方法;反u型联接';适用于“类”的对象;“因素”;

R 没有适用于'的方法;反u型联接';适用于“类”的对象;“因素”;,r,dataframe,comparison,dplyr,anti-join,R,Dataframe,Comparison,Dplyr,Anti Join,我想根据特定列标识dataframe1中存在的行,而dataframe2中不存在这些行。我使用了下面的代码来获得所需的信息 diffId <- anti_join(dat$ID,datwe$ID) 你能分享一下你的想法吗 谢谢几乎所有的dplyr函数都在tbls上运行(取决于上下文,它可以是data.frame、data.table、数据库连接等等),所以您真正想要的是这样的: > dat <- data.frame(ID=c(1, 3, 6, 4), x=runif(4))

我想根据特定列标识dataframe1中存在的行,而dataframe2中不存在这些行。我使用了下面的代码来获得所需的信息

diffId <- anti_join(dat$ID,datwe$ID)
你能分享一下你的想法吗


谢谢

几乎所有的
dplyr
函数都在
tbls
上运行(取决于上下文,它可以是
data.frame
data.table
、数据库连接等等),所以您真正想要的是这样的:

> dat <- data.frame(ID=c(1, 3, 6, 4), x=runif(4))
> datwe <- data.frame(ID=c(3, 5, 8), y=runif(3))
> anti_join(dat, datwe, by='ID') %>% select(ID)
  ID
1  4
2  6
3  1

谢谢@zero323。它符合上述建议。(我会将此线程打开一段时间,以了解执行此任务的其他方法,并将此标记为答案)请您解释一下,当只有一列时,它为什么不起作用?如果只有一列,它会非常有效。问题是,
dat$ID
不再是一个
data.frame
而是一个向量。哦,
anti_-join
只能用于
data.frame
。谢谢准确地说,可以强制到
dplyr::tbl
的对象。正确的标记是data.frame而不是dataframes,仅供参考。(我已经编辑过了。)
> dat <- data.frame(ID=c(1, 3, 6, 4), x=runif(4))
> datwe <- data.frame(ID=c(3, 5, 8), y=runif(3))
> anti_join(dat, datwe, by='ID') %>% select(ID)
  ID
1  4
2  6
3  1
> setdiff(dat$ID, datwe$ID)
[1] 1 6 4