我在包含邮政编码和城市的数据集中有一列。我需要清理它,只留下城市的名字。问题是邮政编码有时在之前,有时在城市名称之后出现:
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
有谁知道如何去做?
答案 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"