2016-07-08 12 views
0

は、私は次のように文字ベクトルを持っていると言う:R:リスト内の各要素の最後のサブ要素にアクセス

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アプローチよりも速いものは何ですか?

+1

word機能で、一度に複数のオブジェクトの上に適用するには、' mapply'を使用することができます: 'mapply (\ '[[\'、x.list、lengths(x.list)) 'となります。私はあなたが実際にスピードを気にするなら、akrunの答えの中のさまざまなオプションが良いと思う。 – Frank

答えて

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" 
+0

はい!尾が私が探していたものです! – DaniCee

2

使用する代わりに、 `sapply`のstringrパッケージ

library(stringr) 
word(x,start = -1,sep = "\\_+") 
関連する問題