【发布时间】:2017-02-14 20:22:10
【问题描述】:
我有一个数据框,其中包含一列凌乱的字符串。每个凌乱的字符串都包含其中某个国家/地区的名称。这是一个玩具版本:
df <- data.frame(string = c("Russia is cool (2015) ",
"I like - China",
"Stuff happens in North Korea"),
stringsAsFactors = FALSE)
感谢countrycode 包,我还有第二个数据集,其中包括两个有用的列:一个包含国家名称的正则表达式 (regex),另一个包含相关的国家名称 (country.name)。我们可以像这样加载这个数据集:
library(countrycode)
data(countrycode_data)
我想编写代码,使用countrycode_data$regex 中的正则表达式来找出df$string 每一行中的国家/地区名称;将该正则表达式与countrycode_data$country.name 中的正确国家名称相关联;最后,将该名称写入新列df$country 中的相关位置。执行此 TBD 操作后,df 将如下所示:
string country
1 Russia is cool (2015) Russian Federation
2 I like - China China
3 Stuff happens in North Korea Korea, Democratic People's Republic of
我无法完全理解如何做到这一点。我尝试过使用grepl、which、tolower 和%in% 的各种组合,但我弄错了方向或尺寸(或两者)。
【问题讨论】:
-
我在
countrycode_data数据框中没有看到regex列?... 编辑,没关系,我想我找到了,叫做country.name.en.regex? -
countrycode_data中的相关列应仅称为regex。具有专有名称的关联列是country.name。 -
可能这样的事情会有所帮助:stackoverflow.com/questions/21165256/…
-
@ulfelder 正则表达式列在包的 0.19 版本中重命名为 country.name.en.regex。我是国家代码作者,cjyetman 在下面给出了正确答案。 countrycode 应该适用于您的用例,但您只是遇到了一个已知的朝鲜正则表达式问题。应该适用于大多数其他国家/地区。