【发布时间】:2020-04-02 14:59:11
【问题描述】:
这是我的例子:
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)
非常感谢任何有用的 cmets 和答案。
【问题讨论】: