String 如何使用稍微不同的字符串按字符向量进行匹配
我正在尝试从其他data.frame向data.frame添加几列: 要从中添加列的data.frame:String 如何使用稍微不同的字符串按字符向量进行匹配,string,r,character,match,String,R,Character,Match,我正在尝试从其他data.frame向data.frame添加几列: 要从中添加列的data.frame: head(fix)[1:2,] Year Name Moders.hjälp. Utg.Sjukvård. Antal.Fall.Moderskapshjälp. Antal.Dagar.Moderskapshjälp. Antal.Dödsfall. 1 1921
head(fix)[1:2,]
Year Name Moders.hjälp. Utg.Sjukvård. Antal.Fall.Moderskapshjälp. Antal.Dagar.Moderskapshjälp. Antal.Dödsfall.
1 1921 Allians 2003 NA 42 1603 43
2 1921 Bageri- och konditoriindustriarb. I Stocholm NA NA NA NA 10
换句话说,我想将fix[,3:ncol(fix)]
添加到:
head(data)[1:4,]
Year Name Delägare.män. Delägare.kvinnor. Sjukdomsfall.män.
92 1921 Sbk. Allians 2416 1610 526
198 1921 Bageri- och Konditoriindustriarb. I Stockholm sbh-k. 143 13 19
通过匹配年份
列和名称
列
问题在于:
上述fix
和data
中的Name
列的名称稍有不同(即Allians
与Sbk.Allians
)。我找不到正确的解决方案来匹配字符串的某些部分以找到相似之处。我试图使用匹配
,但没有成功
这里是dput
dput(头部(固定)[1:2,])
dput(头部(数据)[,c(1:2,11:13)])
非常适合任何建议 您可以使用
agrep
:
sapply(data$Name, function(x) agrep(x, fix$Name, max.distance=0.4))
它将数据$Name与修复$Name匹配。你也可以玩“最大距离”(perhabs in a loop)。之后,您可以合并/索引/等您想要的匹配项
更新
以下几点应该能帮到你:
# match
matches <- sapply(data$Name, function(x) agrep(x, fix$Name, max.distance=0.4))
# clean match
matches_cleaned <- sapply(matches, function(x) ifelse(length(x) > 0,x, NA))
# add matched names to data
data$fix_names <- fix$Name[matches_cleaned]
# merge
merge(data, fix, by.x = c('Year', 'fix_names'), by.y = c('Year', 'Name'))
#匹配
匹配您可以使用agrep
:
sapply(data$Name, function(x) agrep(x, fix$Name, max.distance=0.4))
它将数据$Name与修复$Name匹配。你也可以玩“最大距离”(perhabs in a loop)。之后,您可以合并/索引/等您想要的匹配项
更新
以下几点应该能帮到你:
# match
matches <- sapply(data$Name, function(x) agrep(x, fix$Name, max.distance=0.4))
# clean match
matches_cleaned <- sapply(matches, function(x) ifelse(length(x) > 0,x, NA))
# add matched names to data
data$fix_names <- fix$Name[matches_cleaned]
# merge
merge(data, fix, by.x = c('Year', 'fix_names'), by.y = c('Year', 'Name'))
#匹配
matches是fix
中的全名,始终是data
中名称的一部分?也许您正在查找agrep
。我仍然不清楚你想做什么。@Ananda Mahtoagrep
可能是答案。。但是我怎么能把它放到match
。名字的某些部分总是在数据中
@user1665355,如果你澄清你想做什么,我可能会提出一个建议。哪些名字是正确的fix
或data
?是fix
中的全名始终是data
中名称的一部分吗?也许您正在查找agrep
。我仍然不清楚你想做什么。@Ananda Mahtoagrep
可能是答案。。但是我怎么能把它放到match
。名字的某些部分总是在数据中
@user1665355,如果你澄清你想做什么,我可能会提出一个建议。哪些名字是正确的<代码>修复
或数据
?谢谢!你知道我如何同时匹配年份
列吗?因为我在data
和fix
…@user1665355中为同一家公司工作了几年,也许将此解决方案与merge
相结合会有所帮助。@AnandaMahto我现在正在尝试,但确实做不好…:/R:)还是初学者,你能写代码吗?plz:)@EDi谢谢,试图更改max.distance
,但仍然没有得到正确的匹配:/嗯,这是个棘手的问题。有时,就像您的示例中的Bergsunds
与fix不匹配。谢谢!你知道我如何同时匹配年份
列吗?因为我在data
和fix
…@user1665355中为同一家公司工作了几年,也许将此解决方案与merge
相结合会有所帮助。@AnandaMahto我现在正在尝试,但确实做不好…:/R:)还是初学者,你能写代码吗?plz:)@EDi谢谢,试图更改max.distance
,但仍然没有得到正确的匹配:/嗯,这是个棘手的问题。有时,如您的示例中的Bergsunds
与fix不匹配。