Как удалить строки из кадра данных A, которые соответствуют строкам в кадре данных B, если оба кадра данных имеют разное количество строк? - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть два кадра данных, каждый с одним столбцом, «электронная почта». кадр данных A содержит 60 тыс. строк, а B - 700.

Я хочу удалить из A все письма, которые находятся в B.

Запуск этого не сделал то, что я хочу.

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

Ответы [ 3 ]

0 голосов
/ 01 ноября 2018

Вот один из способов использования базы 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"
0 голосов
/ 01 ноября 2018

dplyr версия:

anti_join(A, B, by = "email")
0 голосов
/ 01 ноября 2018

Один вариант с использованием библиотеки 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...