r - 没有适用于 'anti_join' 的方法应用于类 "factor"的对象

标签 r dataframe comparison dplyr anti-join

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

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

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

Error in UseMethod("anti_join") :
no applicable method for 'anti_join' applied to an object of class "factor"

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

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

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

谢谢

最佳答案

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

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

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

如果您想对向量进行操作,则可以使用 setdiff(在 basedplyr 中均可用)

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

关于r - 没有适用于 'anti_join' 的方法应用于类 "factor"的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30638575/

相关文章:

java - if 条件中的字符串比较总是出错

r - fwrite 更改 POSIXct 值的次数

r - 如何使用 tidyverse 堆叠多列

r - 扩展 “from”和 “to”列定义的范围

python - 求曲线中的线性部分和斜率

comparison - 比较还是分配比较昂贵?

r - 生成一个小集合的所有可能组合

r - 我不能在 shiny 中使用 summarize (mean function) 来绘制条形图

python - 如何在 Pandas Python 中按 id 对行进行排名

C#比较两个日期时间的正确方法