使用部分匹配的字符串合并两个data.frame

时间:2019-07-11 09:17:02

标签: r dataframe join dplyr

我有以下两个data.frames

df1 <- data.frame(name = "RANDI FIRAT CAYLIOGLU", correct = 30)
df2 <- data.frame(name = "FIRAT CAYLIOGLU", id = 01)

有些人使用中间名来命名三个名字,有时使用他们的名字,有时使用他们的名字。根据我的经验,regex_join包的fuzzyjoin函数没有捕获到这样的部分匹配。如何使用部分匹配的名称合并这两个数据集?

1 个答案:

答案 0 :(得分:1)

如果始终是导致问题的名字,则可以使用regex消除它。请注意,我首先将所有因子转换为字符。

df1 <- data.frame(name="RANDI FIRAT CAYLIOGLU", correct = 30, stringsAsFactors = F) 
df2 <- data.frame(name="FIRAT CAYLIOGLU",id = 01, stringsAsFactors = F)

libray(dpylr)
df1%>%
  mutate(name2 = sub("^[A-Za-z]+ ", "", name)) %>%
  full_join(df2, by = c("name2" = "name"))

                   name correct           name2 id
1 RANDI FIRAT CAYLIOGLU      30 FIRAT CAYLIOGLU  1

如果它也可以用作中间名,则可以创建一个仅包含名字和姓氏的附加列name3

libray(dpylr)
    df1%>%
      mutate(name2 = sub("^[A-Za-z]+ ", "", name),
             name3 = sub(" [A-Za-z]+ ", " ", name) %>%
      left_join(df2, by = c("name2" = "name")) %>%
      left_join(df2, by = c("name3" = "name"))

在这里,name2是中间名和姓氏,name3包含名和姓。