通过匹配另一个数据框来替换单词

时间:2016-05-30 16:15:10

标签: r replace gsub

我已经找到了解决这个问题的现有解决方案 - 没有任何运气!

任何帮助表示感谢。

数据

long.name <- c("REPUBLIC OF BELARUS", "REPUBLIC OF VIETNAM"
, "GOVERNMENT OF JAMAICA", "LEBANESE REPLUBLIC")

result <- c(256, 578, 467, 698)

df1 <- data.frame(long.name, result)

country <- c("BELARUS", "VIETNAM", "JAMAICA", "LEBANESE")

country.code <- c("BLR", "VNM", "JAM", "LBN")

df2 <- data.frame(country, country.code)

问题

我希望用相应的代码df1$long.name替换国家/地区名称​​的 df2$country.code的长版本。

即。最终结果将如下所示:

df1$final.aim <- c("REPUBLIC OF BLR", "REPUBLIC OF VNM", 
"GOVERNMENT OF JAM", "LBN REPLUBLIC")

2 个答案:

答案 0 :(得分:2)

scipy的一个选项,

stringr

答案 1 :(得分:1)

首先,我建议将因子final.aim列转换为字符。这使得一些字符串操作更容易;特别是,它可以增加列中值的替换,而不必担心因子水平。或者,由于您希望在新列long.name中构建最终结果,因此您可以将df2列的字符串化副本分配给新列,然后再处理该列

我的解决方案使用for循环一次迭代一个替换候选者,IOW一次迭代一行\b。对于每一行,它构造一个围绕目标词的正则表达式(我假设你只想匹配整个单词,因此df2词边界断言的定界)。然后,它会搜索与模式匹配的长名称,并使用国家/地区代码替换所有目标字词,并再次从sub()使用df1$final.aim <- as.character(df1$long.name); for (sri in seq_len(nrow(df2))) { pat <- paste0('\\b',df2$country[sri],'\\b'); lris <- grep(pat,df1$final.aim); df1$final.aim[lris] <- sub(pat,df2$country.code[sri],df1$final.aim[lris]); }; df1; ## long.name result final.aim ## 1 REPUBLIC OF BELARUS 256 REPUBLIC OF BLR ## 2 REPUBLIC OF VIETNAM 578 REPUBLIC OF VNM ## 3 GOVERNMENT OF JAMAICA 467 GOVERNMENT OF JAM ## 4 LEBANESE REPLUBLIC 698 LBN REPLUBLIC 调用。

val