没有适用于"anti_join"的方法应用于类"因子"的对象

Prr*_*dep 8 comparison r anti-join dataframe dplyr

我想识别dataframe1中存在的行,这些行基于特定列在dataframe2中不存在.我使用下面的代码来获取所需的信息.

diffId <- anti_join(dat$ID,datwe$ID)
Run Code Online (Sandbox Code Playgroud)

不幸的是,我遇到了一个错误:

UseMethod中的错误("anti_join"):
没有适用于"anti_join"的方法应用于类"factor"的对象

我检查了两个数据帧中所需列的类,结果证明是这样的factor.还试图将列分成单独的变量,假设它可以解决问题,但没有运气!

fac1 <- datwe$ID
fac2 <- dat$ID
diffId <- anti_join(fac2,fac1)
Run Code Online (Sandbox Code Playgroud)

你能分享一下你的想法吗?

谢谢

zer*_*323 5

几乎所有dplyr函数都在运行tbls(取决于上下文,可以是data.framedata.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
Run Code Online (Sandbox Code Playgroud)

请注意,顺序显然没有保留。

factor如果您使用不同级别的因子(与上例中的数字不同),则和之间会存在转换character

如果你想对向量进行操作,那么你可以使用setdiff(在 和 中都base可用dplyr

> setdiff(dat$ID, datwe$ID)
[1] 1 6 4
Run Code Online (Sandbox Code Playgroud)