У меня есть два кадра данных, каждый с одним столбцом, «электронная почта». кадр данных A содержит 60 тыс. строк, а B - 700.
Я хочу удалить из A все письма, которые находятся в B.
Запуск этого не сделал то, что я хочу.
merge(A, B, "email", all=T)
Вот один из способов использования базы 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"
dplyr версия:
dplyr
anti_join(A, B, by = "email")
Один вариант с использованием библиотеки sqldf:
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)