当两个数据框的行数不同时,如何从数据框A中删除与数据框B中的行匹配的行?

时间:2018-11-01 02:26:35

标签: r

我有两个数据框,每个数据框都有一列“电子邮件”。数据框A有60K行,B有700行。

我要从A中删除B中的所有电子邮件。

运行此命令并不能满足我的要求。

merge(A, B, "email", all=T)

3 个答案:

答案 0 :(得分:2)

使用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)

答案 1 :(得分:2)

这是使用基数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"

答案 2 :(得分:1)

dplyr版本:

anti_join(A, B, by = "email")