在 R 中,我有两个 df,df1 和 df2。他们都有两个列,一个 ID 列和一个电子邮件列。电子邮件列都是列表列,其中每一行都是电子邮件列表,或者您可以说一个 ID 与多个电子邮件关联。我的目标是通过匹配的电子邮件将 df1 中的 ID1 与 df2 中的 ID2 匹配,因此如果 email1 中的任何电子邮件与 email2 中的任何电子邮件匹配,则无论它来自哪一行,我都可以根据匹配的 ID1 说: 1234 等于 ID2:6653。我的最终数据框至少有 ID1、ID2、matched_Email...
我主要关心的是我的 df1 有约 300k 行,我的 df2 有约 3M 行。它们太大了,我不知道如何有效地构建我想要的数据集。
非常感谢任何帮助,谢谢!!
我目前的代码中有这个函数,但已经过去了 2 个小时,R 仍在加载......
email_match <- function(list1, list2) {
any(sapply(list1, function(x) any(x %in% list2)))
}
我想这里可以进行连接。这对我来说只需一两秒。
(为了简单起见,我的“电子邮件”只是由数字组成的字符串;同样的想法。)
df1 <- data.frame(ID = 1:300000,
email = as.character(round(runif(300000, max = 1000000))))
df2 <- data.frame(ID = 1:3000000,
email = as.character(round(runif(3000000, max = 1000000))))
df1 |>
dplyr::left_join(df2, join_by(email))
典型输出
ID.x email ID.y
<int> <chr> <int>
1 1 753219 719158
2 1 753219 2032616
3 1 753219 2686680
4 2 718068 488011
5 2 718068 748559
6 2 718068 810793
...