Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何使用稍微不同的字符串按字符向量进行匹配_String_R_Character_Match - Fatal编程技术网

String 如何使用稍微不同的字符串按字符向量进行匹配

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

我正在尝试从其他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                                      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 Mahto
agrep
可能是答案。。但是我怎么能把它放到
match
。名字的某些部分总是在
数据中
@user1665355,如果你澄清你想做什么,我可能会提出一个建议。哪些名字是正确的
fix
data
?是
fix
中的全名始终是
data
中名称的一部分吗?也许您正在查找
agrep
。我仍然不清楚你想做什么。@Ananda Mahto
agrep
可能是答案。。但是我怎么能把它放到
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不匹配。