【发布时间】:2016-06-13 02:51:03
【问题描述】:
以下是我想使用 Dplyr 按名字和姓氏加入的两个数据框。
full_join(Names1,Names2,by=c("FirstNames",LastNames")
但是,某些名称的拼写和格式存在差异。我想使用 RecordLinkage (或 adist)来匹配相似的名称,然后覆盖名称,以便它们在加入之前在两个数据帧中匹配。 (我也意识到“FirstNames”和“LastNames”列在两个数据框中都有不同的标题......所以必须更改。)
FirstNames<-c("Chris","Shintaro","Doug","Elsa","Bubbles","Kelly","Christine")
LastNames<-c("MacDougall","Yamazaki","Shapiro","Elizabeth Ray","Murphy","Anderson","Yamaguchi")
Pets<-c("Cat","Dog","Cat","Dog","Cat","Snake","Eagle")
Names1<-data.frame(FirstNames,LastNames,Pets)
FirstNames2<-c("Chris","Doug","Shintaro","Bubbles","Elsa")
LastNames2<-c("MacDougal","Shapiro","Yamazaku","Murphy","Elizabeth")
Dwelling<-c("House","House","Apartment","Condo","House")
Names2<-data.frame(FirstNames2,LastNames2,Dwelling)
以下是我在 RecordLinkage 包中使用的一些步骤,但我遇到了“错误:所有 select() 输入必须解析为整数列位置。”这是因为数据框的行数不同吗?
Results <- compare.linkage(Names1, Names2, blockfld = 1, strcmp = T, exclude = 3)
PairsSelect <- Results$pairs %>% select(firstNameSim = FirstNames, lastNameSim = LastNames)
我想继续使用代码将名称列与上面的 PairsSelect 数据连接起来,以便我可以在名字和姓氏列中找到匹配项,然后覆盖两个数据框,使每个数据框具有相同的名称拼写和格式在加入之前。我只是不确定如何最好地处理一个数据帧(Names1)比另一个数据帧(Names2)包含更多行的事实。
任何关于如何实现这一目标的指导将不胜感激!
【问题讨论】:
-
姓氏不完全匹配并且
Results$pairs$LastNames包含非整数值,这会导致错误。看来您真正想做的是Results$pairs[, c("id1", "id2")]或使用dplyr:Results$pairs %>% select(firstNameSim = id1, lastNameSim = id2) -
谢谢。在示例中,“Results$Pairs”是列表的一部分,但如何使其成为单独的数据框,以便将其加入 Names1 和 Names2?
-
我想按名字和姓氏加入表格...所以必须更改列名。
-
表只加入完全匹配的键值。首要任务是比较和对齐您的全名以完美匹配从一个表到另一个表,以便您可以将它们作为加入表的真正关键吗?此外,由于个人的全名实际上是表中唯一身份的最原子单位,将它们连接起来并将全名与全名对齐是否最有帮助?
-
我想最好将名字和姓氏连接起来作为加入表格的真正关键。我想最好加入两列而不是四列。