8

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

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

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

UseMethod(“anti_join”)中的错误:
没有适用于“anti_join”的方法应用于“因子”类的对象

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

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

你能分享你的想法吗?

谢谢

4

1 回答 1

4

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

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

如果您使用具有不同级别的因子(与上面示例中的数字不同),则存在factor和所character涉及的转换。

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

> setdiff(dat$ID, datwe$ID)
[1] 1 6 4
于 2015-06-04T08:27:32.983 回答