2016-03-07 4 views
1

Допустим, у нас есть список слов:Проверьте, какие слова показывают, по крайней мере один раз в течение слов из другого вектора

words = c("happy","like","chill") 

Теперь у меня есть другая переменная строка:

s = "happyMeal" 

Я хотел проверить какое слово в словах имеет соответствующую часть в s. Таким образом, s может быть «happyTime», «happyFace», «happyHour», но пока есть «счастливый», я хочу, чтобы мой результат возвращал индекс слова «happy» в словах строки.

Этот вопрос подобен, но не идентичен вопросу, заданному в сообщении: Find a string in another string in R.

ответ

2

Вы можете Переберите каждого из слов, что вы ищете с sapply, используя grepl, чтобы определить, если это слово появляется в s:

sapply(words, grepl, s) 
# happy like chill 
# TRUE FALSE FALSE 

Если s это одно слово, то sapply с grepl возвращается логический вектор, который вы можете использовать, чтобы определить слова, которые соответствовали:

words[sapply(words, grepl, s)] 
# [1] "happy" 

Когда s содержит несколько слов, затем sapply с grepl возвращает логическую матрицу, и вы можете использовать суммы столбцов, чтобы определить, какие слова появились, по крайней мере один раз:

s <- c("happyTime", "chilling", "happyFace") 
words[colSums(sapply(words, grepl, s)) > 0] 
# [1] "happy" "chill" 
1

Вот вариант с использованием stri_detect из stringi

library(stringi) 
words[stri_detect_regex(s, words)] 
#[1] "happy"