2017-06-26 3 views
1

私はthis oneと非常によく似た質問がありますが、もっと複雑な状況があります。ここで Rのデータフレームにstrsplitを適用する方法は?

は私のサンプルコードです:

test = data.frame(x = c(1:4), 
       y = c("/abc/werts/h1-1234", "/abc/fghye/seths/h2-234", 
          "/abc/gvawrttd/hyeadar/h3-9868", "/abc/qqras/x1-7653")) 
test$y = as.character(test$y) 

そして、私はこのような出力たい:

1 h1-1234 
2 h2-234 
3 h3-9868 
4 x1-7653 

は、私が試した:

test$y = tail(unlist(strsplit(test$y, "/")), 1) 

しかし、上記のコードの結果が返されます:

1 h1-1234 
2 h1-1234 
3 h1-1234 
4 h1-1234 

私の質問は、どのように私の希望の出力を得ることができるように私のコードを変更する必要がありますか?

ありがとうございます!ここで

答えて

3

は、あなたが探している行です。

test$y = sapply(strsplit(test$y, "/"), tail, 1) 

それはstrsplitによって返されたリストの各要素にtailを適用します。ここ

+0

うわー!本当にありがとう! – BigD

+0

私は、再現可能な例を使って自分の仕事を簡単にしました。 –

1

エンド($)のまで群(([^/]*))として取り込ま/ないゼロ個以上の文字に続くゼロ以上の文字に一致するようにsubを使用してオプション(.*/続い(\\/)でありますキャプチャグループの逆参照(\\1)に置き換えます。

test$y <- sub(".*\\/([^/]*)$", "\\1", test$y) 
test$y 
#[1] "h1-1234" "h2-234" "h3-9868" "x1-7653" 
+1

それも動作します!本当にありがとう! – BigD

関連する問題