這裏有一個基礎R的方式在許多方面出現,使用gregexpr()
,regmatches()
,並regmatches<-()
,:
abbreviateStateNames <- function(x) {
pat <- paste(state.name, collapse="|")
m <- gregexpr(pat, x)
ff <- function(x) state.abb[match(x, state.name)]
regmatches(x, m) <- lapply(regmatches(x, m), ff)
x
}
x <- c("Hobby Lobby (California)",
"Hello New York City, here I come (from Greensboro North Carolina)!")
abbreviateStateNames(x)
# [1] "Hobby Lobby (CA)"
# [2] "Hello NY City, here I come (from Greensboro NC)!"
或者 - 和相當多的
library(gsubfn)
pat <- paste(state.name, collapse="|")
gsubfn(pat, function(x) state.abb[match(x, state.name)], x)
[1] "Hobby Lobby (CA)"
[2] "Hello NY City, here I come (from Greensboro NC)!"
你有什麼期望: - 當然,你可以使用gsubfn包完成同樣的事情?要獲得「沃爾瑪,紐約州」?但是什麼是假設? –
按照慣例,「Walmart,NY」(這就是'state.abb'在完整字符串下工作時會做的事情) –
我的建議:將字符串拆分爲「第一部分」(只是城市?)和「狀態部分「。製作從完整狀態名稱到縮寫的表格映射。合併。不要再將字符串的兩部分結合起來,因爲你爲什麼要這樣做? – Frank