R 中两个数据帧的映射列

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

我有两个包含多个列的数据框,但为了简单起见,假设我的两个数据框是这样的:

## 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 中出现的名称相同?

r pattern-matching string-matching
1个回答
0
投票
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
© www.soinside.com 2019 - 2024. All rights reserved.