这可能是一个常见的用例,我在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
感谢。
答案 0 :(得分:0)
您可以使用函数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)
}