r - 用地址替换缩写

时间:2017-07-06 04:58:24

标签: r regex

这可能是一个常见的用例,我在python中这样做,但在这种情况下,我必须在R.中如何将rd替换为road,st to street等。在R. / p>

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

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

感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用函数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标记),并将其替换为列表中的条目。每次我们用结果覆盖Adresses向量,所以我们按顺序应用所有过滤器。

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