サブストリングを共有する長いリストの文字列があります。このリストはイベントストリームのデータから来ているので、何万行もありますが、この例では単純化します。ペット:サブストリングキーを持つ検索文字列R
+--------------------------------+
| Pets |
+--------------------------------+
| "one calico cat that's smart" |
| "German Shepard dog" |
| "A Chameleon that is a Lizard" |
| "a cute tabby cat" |
| "the fish guppy" |
| "Lizard Gecko" |
| "German Shepard dog" |
| "Budgie Bird" |
| "Canary Bird in a coal mine" |
| "a chihuahua dog" |
+--------------------------------+
dput output: structure(list(Pets = structure(c(8L, 6L, 1L, 3L, 9L, 7L, 6L, 4L, 5L, 2L),.Label = c("A Chameleon that is a Lizard", "a chihuahua dog", "a cute tabby cat", "Budgie Bird", "Canary Bird in a coal mine", "German Shepard dog", "Lizard Gecko", "one calico cat that's smart", "the fish guppy"), class = "factor")), .Names = "Pets", row.names = c(NA, -10L), class = "data.frame")
私はペットのジェネリックタイプ(など、犬、猫、)に基づいて情報を追加したいと私は、この情報を保持しているキーテーブルを持っている:
+----------+----------------+
| key | classification |
+----------+----------------+
| "dog" | "canine" |
| "cat" | "feline" |
| "lizard" | "reptile" |
| "bird" | "avian" |
| "fish" | "fish" |
+----------+----------------+
dput output: structure(list(key = structure(c(3L, 2L, 5L, 1L, 4L), .Label = c("bird", "cat", "dog", "fish", "lizard"), class = "factor"), classification = structure(c(2L, 3L, 5L, 1L, 4L), .Label = c("avian", "canine", "feline", "fish", "reptile"), class = "factor")), .Names = c("key", "classification"), row.names = c(NA, -5L), class = "data.frame")
どうかPets
テーブルの「長い文字列」を使用して、キーテーブルに関連するclassification
を見つけますか?問題は、私のルックアップ文字列がキーテーブルにある部分文字列を含んでいることです。
私はこのようなgreplを使用して開始しています:
key[grepl(pets[1,1], key[ , 2]), ]
「猫」ですが、「三毛猫」は、キーリストにないので、しかし、これは動作しません。探している結果は「feline
」です。
(注:私自身のコードでは、これは適用関数内にあり、データの各行をループするため、単純に切り替えることはできません。pets[1,1]
の代わりにpets[n,1]
です。その結果をイベントストリームデータに追加して解析します)。
これを行う方法について私は頭を悩ましています。何かアドバイス?
これは、と思われますキーは常に各 "長い文字列"の2番目の単語です。これは合理的な仮定ですか? – useR
残念ながら、いいえ。弦には数か所から数多くの言葉があります。私はちょうどそこに 'キーの言葉があることを知っている。 – JoeM05
次に、この仮定に合わない長い文字列を含むサンプルを提供する必要があります。また、 'dput(my_data)'の出力をコピーしてあなたの質問に貼り付けてください。 – useR