我已经找到了解决这个问题的现有解决方案 - 没有任何运气!
任何帮助表示感谢。
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")
答案 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