我想在r中的最后一个空格和最后一个空格之间拾取单词。例如,对于字符串'Albert Avenue Ngahio 6088'
,我想要的输出是
[1] "Ngahio"
对于字符串'Barie Road Johnvile 6051'
,我想要选择
[1] "Johnvile"
谢谢。
答案 0 :(得分:2)
我想你可能想要sapply
。 sapply
和strsplit
> s <- c("Albert Avenue Ngahio 6088", "Barie Road Johnvile 6051")
> sapply(strsplit(s, "\\s+"), `[`, 3)
# [1] "Ngahio" "Johnvile"
或者,从末尾开始查找元素的更通用的方法是
> sapply(strsplit(s, "\\s+"), tail, 2)[1,]
# [1] "Ngahio" "Johnvile"
答案 1 :(得分:0)
尝试:
ss = 'Albert Avenue Ngahio 6088'
uu = unlist(strsplit(ss, ' '))
uu
[1] "Albert" "Avenue" "Ngahio" "6088"
uu[length(uu)-1]
[1] "Ngahio"
可以创建一个功能:
myfn = function(ss){
uu = unlist(strsplit(ss, ' '))
uu[length(uu)-1]
}
myfn("Albert Avenue Ngahio 6088")
[1] "Ngahio"
myfn('Barie Road Johnvile 6051')
[1] "Johnvile"
答案 2 :(得分:0)
通过sub
,
> f <- "Albert Avenue Ngahio 6088"
> sub("^.*?(\\S+)\\s*\\S+$", "\\1", f, perl=TRUE)
[1] "Ngahio"
> sub("^.*?(\\S+)\\s*\\S+$", "\\1", "Barie Road Johnvile 6051", perl=TRUE)
[1] "Johnvile"
模式说明:
^
断言我们刚开始。.*?
匹配任何字符零次或多次。 ?
迫使正则表达式引擎进行最短匹配后的*
量词。(\S+)
捕获一个或多个非空格字符,并将其存储到一个组中。您可以使用它的索引号来引用之后捕获的内容。\s*
匹配零个或多个空格字符。\S+$
匹配一个或多个非空格字符,该字符必须是最后一个字符串,因为以下行结束锚$
。