R: Хотите проверить, появляется ли какой-либо элемент набора слов в определенной строке

Предполагая, что у меня есть фрейм данных с именем items, а первый столбец - ItemNames. Я хотел бы просмотреть каждый элемент в items$ItemNames и проверить, содержат ли они какие-либо из этих слов в:

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

и если да, замените всю строку словом "confirmed".

Что я пробовал:

Я использовал комбинацию цикла 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)

Это не сработало. В идеале я должен заменить все имена в ItemNames на «подтвержденные», если они содержат какие-либо элементы в words.


person Qonl    schedule 08.09.2017    source источник
comment
Вы пытались сделать точные совпадения или только частичные совпадения? При обращении за помощью вы должны включить воспроизводимый пример с образцом вход и желаемый результат. Я думаю, что дубликат отвечает на ваш вопрос, но если нет, отредактируйте свой вопрос, чтобы сделать вашу конкретную проблему более ясной, и его можно будет открыть повторно.   -  person MrFlick    schedule 08.09.2017


Ответы (1)


Использование stringr:

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"
person 67342343    schedule 08.09.2017