【发布时间】:2018-11-01 02:26:35
【问题描述】:
我有两个数据框,每个都有一列“电子邮件”。数据框 A 有 60K 行,B 有 700 行。
我想从 A 中删除 B 中的所有电子邮件。
运行它并没有达到我想要的效果。
merge(A, B, "email", all=T)
【问题讨论】:
-
如果可能,请添加示例数据
标签: r
我有两个数据框,每个都有一列“电子邮件”。数据框 A 有 60K 行,B 有 700 行。
我想从 A 中删除 B 中的所有电子邮件。
运行它并没有达到我想要的效果。
merge(A, B, "email", all=T)
【问题讨论】:
标签: r
这是使用基础 R 的一种方法:
A_new <- A[!(A$email %in% B$email), ]
一个例子如下
> a <- c(1:10, 1:10)
> a <- paste0(a, "@hotmail.com")
> b <- c("2@hotmail.com", "3@hotmail.com", "4@hotmail.com")
> c <- a[!(a %in% b) ]
> c
[1] "1@hotmail.com" "5@hotmail.com" "6@hotmail.com" "7@hotmail.com"
[5] "8@hotmail.com" "9@hotmail.com" "10@hotmail.com" "1@hotmail.com"
[9] "5@hotmail.com" "6@hotmail.com" "7@hotmail.com" "8@hotmail.com"
[13] "9@hotmail.com" "10@hotmail.com"
【讨论】:
Ctrl-K。 stackoverflow.com/editing-help
一个选项,使用sqldf 库:
library(sqldf)
sql <- "SELECT a.*
FROM A a LEFT JOIN B b
ON a.email = b.email
WHERE b.email IS NULL"
A <- sqldf(sql)
【讨论】:
dplyr 版本:
anti_join(A, B, by = "email")
【讨论】:
Warning message: Column 'email' joining factors with different levels, coercing to character vector
A和Bdata.frames中的email列转换为带有as.character()的字符。