这可能是一个常见的用例,我在python中这样做,但在这种情况下,我必须在R中执行此操作。如何更换 rd 到道路、st 到 街道等。在R.
假设我有这样的映射字典,
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
谢谢。
您可以使用函数gsub
。gsub("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)
}