清理R中的数据:解析复杂的字符串

时间:2015-07-29 21:26:20

标签: r string parsing

我在包含邮政编码和城市的数据集中有一列。我需要清理它,只留下城市的名字。问题是邮政编码有时在之前,有时在城市名称之后出现:

52064 Aachen 
1000 EA Amsterdam 
6411 EJ Heerlen 
Johannesburg 
Dublin 2 
3600 AA Maarssen 
75591 Paris Cedex 12 
7302 HA Apeldoorn

我需要将其清理成

Aachen 
Amsterdam 
Heerlen 
Johannesburg 
Dublin
Maarssen 
Paris 
Apeldoorn

有谁知道如何去做?

1 个答案:

答案 0 :(得分:1)

一种方法是使用gsub,并使用以下代码的加强版本:

gsub("^ *| *$","",gsub("[0-9]|[A-Z]{2}|Cedex","",mydata))

[1] "Aachen"       "Amsterdam"    "Heerlen"      "Johannesburg"
 "Dublin"       "Maarssen"     "Paris"        "Apeldoorn"

在英语中,我要求它首先删除数字[0-9]然后添加OR条件|然后要求它取出一个接一个出现的两个大写字母的实例,另一个或者,然后删除特定的邮政标记,如单词Cedex。我将其包装在另一个gsub中,以处理任何初始^或最终$常规空格。

或者,您可以尝试@ akrun使用library(maps)获取world.cities$name(四万三千个地方)并提取一些矢量化正则表达式的建议,但我遇到重复问题,即在我的玩具示例中,“约克”与“纽约”。

world.cities$name[(unlist(lapply(world.cities$name, grepl, "52064 Aachen ")))]
[1] "A" "Aachen"