【问题标题】:r - replace a abbreviations with in address [duplicate]r - 用地址替换缩写[重复]
【发布时间】:2017-07-06 04:58:24
【问题描述】:

这可能是一个常见的用例,我在 python 中执行此操作,但在这种情况下,我必须在 R 中执行此操作。如何在 R 中将 rd 替换为 road、st 到 street 等。

假设我有一个这样的映射字典,

dict = { st : street, rd : road, Ln : Lane, Pl : Place}

在我的 df 中,

Address
2/20,Queen St,London,UK
1,King Ln,Paris,France
5,Stuart Pl,Paris,France

我如何得到这个,

Address
2/20,Queen Street,London,UK
1,King Lane,Paris,France
5,Stuart Place,Paris,France

谢谢。

【问题讨论】:

    标签: r regex


    【解决方案1】:

    您可以为此使用函数gsubgsub("Ln", "Lane", addresses) 其中adresses 是将您的地址作为字符串的向量,将所有出现的“Ln”替换为“Lane”。你可以使用正则表达式,但我认为这对你没有帮助。

    因此,您所要做的就是为您想要进行的所有替换调用该函数,然后您就完成了。 R 没有字典(据我所知),因此一次完成所有操作需要另一种格式来存储您的映射。

    回答您关于如何为多个字典条目执行此操作的问题:

    由于我们在 R 中没有字典,所以我们采用下一个最好的东西:列表。列表条目有一个名称和一个对象(值、向量、任何东西)。我们可以将条目的名称设为字典键,并将值设为其翻译:

    dict <- list(St = "Street",
                 Rd = "Road",
                 Ln = "Lane",
                 Pl = "Place")
    

    以您的示例中的地址为例:

    Adresses <- c("2/20,Queen St,London,UK",
                  "1,King Ln,Paris,France",
                  "5,Stuart Pl,Paris,France")
    

    现在我们可以遍历列表的条目,创建表达式(使用@wibeasley 提到的\b 标签),并将其替换为列表中的条目。每次我们用结果覆盖地址向量时,我们都会依次应用所有过滤器。

    for(i in 1:length(dict)){
      Adresses <- gsub(paste0("\\b", names(dict)[i], "\\b"), dict[[i]], Adresses)
    }
    

    【讨论】:

    • boundary 标签(即\\bLn\\b)包围Ln,这样它就不会拾取属于较大单词一部分的字母
    • 感谢你们俩。但是我该如何对多个项目执行此操作,例如 R 中的字典?
    • @ds_user 查看我的编辑。
    猜你喜欢
    • 2015-01-15
    • 1970-01-01
    • 2014-12-18
    • 2014-09-25
    • 2018-07-06
    • 2016-03-21
    • 2011-02-05
    • 2015-08-19
    • 1970-01-01
    相关资源
    最近更新 更多