別の方法は、正規表現関数regmatches
とregexec
でキャプチャサブ表現を使用することですstringrパッケージからもstr_sub
あります。
# the original example
x <- 'hello stackoverflow'
# grab the substrings
myStrings <- regmatches(x, regexec('(^.)(.*)', x))
これは、文字列全体、最初の文字を返し、そしてlist(c(x, substr(x, 1, 1), substr(x, 2, nchar(x))))
に相当する長さのリスト1.
myStrings
[[1]]
[1] "hello stackoverflow" "h" "ello stackoverflow"
に結果を「ポップ」。つまり、目的の要素とフルストリングのスーパーセットが含まれています。
sapply
を追加すると、この方法は、これが最初の要素として一致文字列全体とによって捕捉整合部分式のリストを返す> 1.
# a slightly more interesting example
xx <- c('hello stackoverflow', 'right back', 'at yah')
# grab the substrings
myStrings <- regmatches(x, regexec('(^.)(.*)', xx))
長の文字ベクトルのために働くことを可能にします()
を以下の要素として含む。したがって、正規表現'(^.)(.*)'
では、(^.)
が最初の文字と一致し、(.*)
が残りの文字と一致します。
myStrings
[[1]]
[1] "hello stackoverflow" "h" "ello stackoverflow"
[[2]]
[1] "right back" "r" "ight back"
[[3]]
[1] "at yah" "a" "t yah"
今、私たちは希望のサブストリングを引き出すために信頼できるsapply
+ [
メソッドを使用することができます。
myFirstStrings <- sapply(myStrings, "[", 2)
myFirstStrings
[1] "h" "r" "a"
mySecondStrings <- sapply(myStrings, "[", 3)
mySecondStrings
[1] "ello stackoverflow" "ight back" "t yah"
出典
2017-06-12 19:51:49
lmo
これは非常に素晴らしいトリックですが、私はその質問を逃すと思います。 – pedrosaurio
他の回答と同じ出力を生成できるので、さらに説明する必要があります。抽出に 'sapply'を使うコードの最後のブロックを見てください。質問で指定されている最初の文字を「ポップ」することは、結果のベクトル(mySecondStrings)に対してこのプロセスを繰り返すことです。 – lmo
あなたが追加した余分な説明と一緒に動作することは確かですが、私はまだそれをもっと複雑にする必要があります。 – pedrosaurio