gpt4 book ai didi

r - 模糊连接2个大数据框

转载 作者:行者123 更新时间:2023-12-02 07:59:35 25 4
gpt4 key购买 nike

这是我的例子:

id <- 1:5
names_1 <- c("hannah", "marcus", "fred", "joe", "lara")
df_1 <- data.frame(id, names_1)
df_1$phonenumberFound <- NA


names_2 <- c("hannah", "markus", "fredd", "joey", "paul", "mary", "olivia")
phone <- c(123, 234, 345, 456, 567, 678, 789)
df_2 <- data.frame(names_2, phone)

我想实现的是:

如果 df_2 中的其中一个姓名(至少大约)与 df_1 中的姓名匹配,那么我想在 df_1 中添加相应的电话号码。

基本上,这是一种模糊的左连接,但我没有成功。

事实上,我真正的 df_1 有 30.000 行,而我真正的 df_2 有 500.000 行。有没有快速的方法来做到这一点?

谢谢!

编辑:

我需要更改并阐明我的示例,因为我使用目前提供的答案遇到了内存问题。 (我使用的是 16 GB RAM 的 Windows 笔记本电脑。)

id_1 <- 1:30000
names_1 <- sample(c("hannah", "marcus", "fred", "joe", "lara"), 30000, replace = TRUE, prob = c(0.2, 0.2, 0.2, 0.2, 0.2))
df_1 <- data.frame(id_1, names_1)
df_1$numberFound <- NA

id_2 <- 1:500000
names_2 <- sample(c("hannah", "markus", "paul", "mary", "olivia"), 500000, replace = TRUE, prob = c(0.2, 0.2, 0.2, 0.2, 0.2))
anyNumber <- sample(c(123, 234, 345, 456, 567), 500000, replace = TRUE, prob = c(0.2, 0.2, 0.2, 0.2, 0.2))
df_2 <- data.frame(id_2, names_2, anyNumber)

非常感谢任何有帮助的评论和回答。

最佳答案

我们可以使用 adist 来计算字符向量之间的字符串距离。

adist(df_1$names_1, df_2$names_2)
# [,1] [,2] [,3] [,4] [,5] [,6] [,7]
#[1,] 0 5 6 6 5 5 6
#[2,] 5 1 5 6 4 3 6
#[3,] 6 5 1 3 4 4 6
#[4,] 6 6 4 1 4 4 6
#[5,] 4 4 5 4 3 2 4

定义一些合适的允许阈值,并分配相应的phone列。

thresh <- 1
mat <- adist(df_1$names_1, df_2$names_2) <= thresh
inds <- max.col(mat) * (rowSums(mat) > 0)
df_1$phone <- df_2$phone[replace(inds, inds == 0, NA)]

df_1
# id names_1 phone
#1 1 hannah 123
#2 2 marcus 234
#3 3 fred 345
#4 4 joe 456
#5 5 lara NA

但是,由于这会生成一个 m 乘以 n 的矩阵,因此它可能不是最有效的方法。

关于r - 模糊连接2个大数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59250028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com