说我有一个像:
这样的角色矢量 x <- c('A__B__Mike','A__Paul','Daniel','A__B__C__Martha','A__John','A__B__C__D__Laura')
我想要一个只有最后位置名字的矢量;我想我可以使用正则表达式删除第一个块,但是我想使用strsplit()来分割'__':
x.list <- strsplit(x, '__')
如何访问此列表中每个元素的最后一个子元素(名称)?如果我知道这个位置,我只知道怎么做:
sapply(x.list, "[[", 1)
但是当位置变量时如何访问最后一个?谢谢!
在任何情况下,首先从x中提取名称的最快方法是什么?还有比strsplit更快的方法吗?
答案 0 :(得分:2)
我们可以使用base R
执行此操作。使用sub
sub(".*__", "", x)
#[1] "Mike" "Paul" "Daniel" "Martha" "John" "Laura"
或strsplit
,我们得到tail
sapply(strsplit(x, '__'), tail, 1)
#[1] "Mike" "Paul" "Daniel" "Martha" "John" "Laura"
或者为了找到该位置,我们可以使用gregexpr
,然后使用substring
substring(x, sapply(gregexpr("[^__]+", x), tail, 1))
#[1] "Mike" "Paul" "Daniel" "Martha" "John" "Laura"
或stri_extract_last
library(stringi)
stri_extract_last(x, regex="[^__]+")
#[1] "Mike" "Paul" "Daniel" "Martha" "John" "Laura"
答案 1 :(得分:2)
使用word
包
stringr
功能
library(stringr)
word(x,start = -1,sep = "\\_+")