这似乎很明显,但我无法弄清楚。我有一个包含州名和其他随机单词的字符向量,并想提取州名。
df <- data.frame(string = c("The quick brown Arizona","jumps over the Alabama","dog Arkansas"))
Run Code Online (Sandbox Code Playgroud)
我可以单独创建提取状态名称:
df$state[grepl("Alabama",df$string)] <- "Alabama"
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何在不复制和粘贴 42 次的情况下为所有状态复制它。我得到的最接近的是:
find.state <- function(x){
df$state[grepl(x,df$string)] <- x
}
lapply(state.name, find.state)
Run Code Online (Sandbox Code Playgroud)
但这只是打印所有州名。
你可以用一个有点笨拙的正则表达式来做到这一点。
df$state = sub(".*\\b(Arizona|Alabama|Arkansas)\\b.*", "\\1", df$string)
df
string state
1 The quick brown Arizona Arizona
2 jumps over the Alabama Alabama
3 dog Arkansas Arkansas
Run Code Online (Sandbox Code Playgroud)
当然,您需要包括所有州的名称,而不仅仅是这三个。因此,您可以先将其构建为模式。
Pattern = paste0(paste0(".*\\b(", paste0(state.name, collapse="|")), ")\\b.*")
df$state = sub(Pattern, "\\1", df$string)
Run Code Online (Sandbox Code Playgroud)