R:访问列表

时间:2016-07-08 04:07:38

标签: r list split element apply

说我有一个像:

这样的角色矢量
 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更快的方法吗?

2 个答案:

答案 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 = "\\_+")