2017-09-08 16 views
0

itemsというデータフレームがあり、最初の列がItemNamesであると仮定します。R:ある文字列に単語セットの要素が含まれていないか確認したい

words = c("apple","Apple","Pear","pear")

と、彼らは、言葉"confirmed"で文字列全体を置き換えない場合:私はitems$ItemNamesでの各項目を通過し、彼らがこれらの単語のいずれかを含むかどうかを確認したいと思います。

を、私はそれを行うにはforループとif文の組み合わせを使用しますが、それは失敗しました::

search = function(x){ 
    words = c("apple","Apple","Pear","pear") 
    for (i in length(x)){ 
     if (grepl(words, x[1][i]) == TRUE){ #where x[1][i] is the individual element in the ItemNames. 
      x[1][i] = "confirmed"} 
    } 
} 

search(items)

をそれが機能しなかった私が試した何

。理想的には、いずれかの要素にwordsが含まれている場合、ItemNamesのすべての名前を「確認済み」に置き換える必要があります。 stringr使用

+0

を、あなたは完全に一致または単に部分的な一致をやろうとしていましたか?助けを求めるときは、サンプル入力と希望する出力を持つ[再現可能な例](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)を含める必要があります。私は重複があなたの質問に答えると思うが、そうでなければあなたの特定の問題をより明確にするためにあなたの質問を編集し、それを再オープンすることができる。 – MrFlick

答えて

0

library(stringr) 

words <- c("apple", "Apple", "Pear", "pear") 
pattern <- paste(words, collapse = "|") 

dt <- data.frame(
    ItemNames = c("Superb apple", "Superb Pear", "Superb car"), 
    Cost = c(1, 2, 3), 
    stringsAsFactors = FALSE 
) 

index <- str_detect(dt$ItemNames, regex(pattern)) 
dt[index,]$ItemNames <- "confirmed" 
関連する問題