我有两个包含多个列的数据框,但为了简单起见,假设我的两个数据框是这样的:
## Dataframe #1
df1 <- data.frame(name = c("Jake", "Paul", "Luis", "Leon"),
salary_new = c(60, 80, 90, 50))
## Dataframe #2
df2 <- data.frame(name = c("Paul Henderson", "John F. Smith", "Leon K.", "Luis Sierra"),
salary_old = c(60, 55, 60, 80))
我想在两个名称列之间进行某种映射,我会将 DF1 中的名称替换为 DF2 中的名称,以产生以下结果:
df3 <- data.frame(name = c("Jake", "Paul Henderson", "Luis Sierra", "Leon K."),
salary_new = c(60, 80, 90, 50))
我遇到的麻烦是每个数据框都有不属于另一个的名称,属于的名称与它们略有不同(包括姓氏,中间名首字母)。有没有一种方法可以进行各种模糊匹配以获得所需的输出并使 DF2 中不存在的名称与它们在 DF1 中出现的名称相同?
library(fuzzyjoin)
fuzzy_right_join(df2, df1, match_fun = stringr::str_detect) %>%
mutate(name = apply(across(contains("name")), 1, \(x) x[which.max(nchar(x))])) %>%
select(name, salary_new)
# name salary_new
# 1 Jake 60
# 2 Paul Henderson 80
# 3 Luis Sierra 90
# 4 Leon K. 50