我有以下两个data.frames
df1 <- data.frame(name = "RANDI FIRAT CAYLIOGLU", correct = 30)
df2 <- data.frame(name = "FIRAT CAYLIOGLU", id = 01)
有些人使用中间名来命名三个名字,有时使用他们的名字,有时使用他们的名字。根据我的经验,regex_join
包的fuzzyjoin
函数没有捕获到这样的部分匹配。如何使用部分匹配的名称合并这两个数据集?
答案 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
包含名和姓。