【问题标题】:Assistance on removing sections of a string column协助删除字符串列的各个部分
【发布时间】:2017-07-20 00:56:24
【问题描述】:

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

但我也有<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

提前致谢

【问题讨论】:

  • 你试过?gsub
  • 另外,请查看 stringi 包以转换非 ASCII 字符,例如 this answer

标签: r data-cleaning


【解决方案1】:

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

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"

【讨论】:

    【解决方案2】:

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

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

    这将删除&lt;&gt; 之间的所有字符,包括&lt;&gt;

    【讨论】:

      猜你喜欢
      • 2011-06-27
      • 2017-07-02
      • 2022-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-31
      相关资源
      最近更新 更多