协助删除字符串列的部分

时间:2017-07-19 16:00:29

标签: r data-cleaning

我有城市名称的数据,伦敦,伦敦,纽约,纽约等。

但我也有<c3><U+119B>London, M<c3><U+1193>New York形式的数据,为了让事情变得复杂一点,我的行包含London<c3><U+1193>OL, Sydney<c3><U+0087>NL and London(Westminster)等值,Alicante / ALACANT也在数据集中也有西班牙语重音符号Coloma de Cervellò, La Riera de Gaià, Sant Vicen <c3><U+0087> Dels Horts

所以我只想清理这一栏。

有人可以指出我正确的方向如何删除部分列,例如

<c3><U+119B>London       to        London
Sydney<c3><U+0087>NL     to        Sydney

提前致谢

2 个答案:

答案 0 :(得分:0)

如果您有数据集中希望找到的所有城市的列表,我会这样做:

goodNames <- c("London", "Alicante", "Sydney")
badNames <- c("London(Westminster)", "Alicante/ALACANT", "SydneyNL")
newNames <- badNames

for (i in c(1:length(goodNames))){
    newNames[grepl(goodNames[i], badNames)] <- goodNames[i]
}

这样做是为了遍历goodNames向量中的每个好的城市名称,并检查是否可以在每个坏名称中找到该名称(例如,“Syndey”出现在“SydneyNL”中)。如果是,则将坏名称替换为好名称。查看grep()文档,有很多有用的选项,比如匹配是否区分大小写。

如果你没有适当拼写的城市列表,那么你可能需要进行大量的调整。阅读grep()以及grep()文档中列出的相关函数。如果你觉得它太混乱了,那么最简单的方法就是这样:

df <- data.frame(city=badNames, stringsAsFactors= FALSE)

df$city[df$city == "SydneyNL"] <- "Sydney"
df$city[df$city == "London(Westminster)"] <- "London"

答案 1 :(得分:0)

这是考虑这样做的一种方式:

bad <- "<c3><U+119B>London"  
good <- gsub("\\<[^\\]]*\\>", "", bad, perl=TRUE);
good
[1] "London"

这会删除包含<><

>之间的所有字符