在 r 中,通过两列高效匹配两个数据框,每行包含电子邮件列表

问题描述 投票:0回答:1

在 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)))
}
r matching large-data
1个回答
0
投票

我想这里可以进行连接。这对我来说只需一两秒。

(为了简单起见,我的“电子邮件”只是由数字组成的字符串;同样的想法。)

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
 ...
© www.soinside.com 2019 - 2024. All rights reserved.