首页 文章

没有适用于'anti_join'的方法适用于类“因子”的对象

提问于
浏览
7

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

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

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

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

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

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

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

谢谢

1 回答

  • 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
    

    请注意,订单显然不会保留 .

    如果您使用不同级别的因子(与上面示例中的数字不同),则涉及 factor 和_2848774之间的转换 .

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

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

相关问题