2016-07-13 2 views
0

で識別します。文字列のベクトル内のパターンのすべてのインスタンスを識別しようとしています。私はちょうどfullpatternのすべてのインスタンスを見つけたい文字ベクトル内のパターンのインスタンスをR

fruits <- c("Cherry", "Grape", "Orange", "Lemon") 
    pattern <- c("Lemon", "Grape", "Cherry", "Grape") 
    full <- sample(fruits, 1000, replace = TRUE) 

:私はこのような何かを見ています。私の内なるJavaの赤ちゃんは、このような何かをループすると言いますか?

for(i in 1:(length(full)-length(pattern))) { 
     if(full[i] == pattern[1]) { 
     if(full[i+1] == pattern[2]) { 
      ... 

次に、インデックスを保存します。しかし、それは私にとって非常に効率的ではない。これは道のりですか?誰かがこの機能をもっと簡単に/もっと速くする機能やパッケージの方向に向けることができますか?

編集:その後、私は持っていると思います

... 
    [177] "Lemon" "Grape " "Cherry" "Grape" "Grape" "Lemon" "Cherry" "Grape" "Lemon" "Cherry" "Orange" 
    ... 

: 私は明確されていないよ、私はどこかfullでこのような何かを探して終わるすなわちあれば、どこpattern開始fullで知って申し訳ありませんが必要パターン(レモン、ブドウ、チェリー、ブドウ)がそこに現れ始めてからそのインデックス(177)を見つける方法。理想的には、後でパターンが現れたら、私はそれも知っているでしょう。すべてのインスタンスpatternを見つける必要があります。

+0

私は[これ](http://stackoverflow.com/questions/33027611/how-to-index-a-vector-sequence-within-a-vector-sequence)は似ているはずです –

+0

実際には編集を無視するかもしれません私はあなたが私をここでカバーしてくれたと思う。 – etaylor

答えて

2

次のように動作するはずです。

which(full %in% pattern) 
0

それはあなたが探しているが、

l = apply(sapply(full, grepl, pattern), 1, function(x) { (1:length(full))[x] }) 
names(l) = pattern 

はあなたにpattern内の要素、fullpatternが見られることをインデックスと同じ長さのリストを与えるものを私に完全には明らかではありません。 patternは私に文字列マッチングを意味するので、私はそれが部分文字列の一致ではない場合は、%in%は間違いなく速くなります

することができた、greplを使用しています。

関連する問題