没有适用的方法来反对' anti_join'应用于班级"因素"

时间:2015-06-04 08:20:52

标签: r dataframe comparison dplyr anti-join

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

diffId <- anti_join(dat$ID,datwe$ID)

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

  

UseMethod错误(&#34; anti_join&#34;):
  没有适用的方法来反对&#39; anti_join&#39;应用于类&#34;因素&#34;

的对象

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

fac1 <- datwe$ID
fac2 <- dat$ID
diffId <- anti_join(fac2,fac1)

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

由于

1 个答案:

答案 0 :(得分:3)

几乎所有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

请注意,订购显然不会保留。

如果您使用不同级别的因子(与上述示例中的数字不同),则会在factorcharacter之间进行转换。

如果你想对矢量进行操作,那么你可以使用setdiffbasedplyr都有)

> setdiff(dat$ID, datwe$ID)
[1] 1 6 4