没有适用于 'anti_join' 的方法应用于 class "factor" 的对象
No applicable method for 'anti_join' applied to an object of class "factor"
我想根据特定列识别 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"
我检查了两个数据框中所需列的 class,结果是 factor
。还尝试将列分离到一个单独的变量中,假设它可以解决问题,但运气不佳!
fac1 <- datwe$ID
fac2 <- dat$ID
diffId <- anti_join(fac2,fac1)
能否分享一下您的想法?
谢谢
几乎所有dplyr
函数都对tbls
进行操作(根据上下文可以是data.frame
、data.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
我想根据特定列识别 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"
我检查了两个数据框中所需列的 class,结果是 factor
。还尝试将列分离到一个单独的变量中,假设它可以解决问题,但运气不佳!
fac1 <- datwe$ID
fac2 <- dat$ID
diffId <- anti_join(fac2,fac1)
能否分享一下您的想法?
谢谢
几乎所有dplyr
函数都对tbls
进行操作(根据上下文可以是data.frame
、data.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