У меня есть 2 набора строк. Char и Char2 для этого примера. Я пытаюсь определить, содержит ли Char хотя бы 2 слова из Char2 (любые два слова могут совпадать). Я еще не дошел до части "по крайней мере, 2 слова", но я должен сначала выяснить соответствие любого слова в каждой строке. Любая помощь будет принята с благодарностью.
Я пробовал использовать пакет stringr несколькими способами. Пожалуйста, смотрите ниже. Я попытался использовать аналогичные решения, на которые Роберт ответил в этом вопросе: Обнаружение нескольких строк с помощью dplyr и stringr
shopping_list <- as.data.frame(c("good apples", "bag of apples", "bag of sugar", "milk x2"))
colnames(shopping_list) <- "Char"
shopping_list2 <- as.data.frame(c("good pears", "bag of sugar", "bag of flour", "sour milk x2"))
colnames(shopping_list2) <- "Char2"
shop = cbind(shopping_list , shopping_list2)
shop$Char = as.character(shop$Char)
shop$Char2 = as.character(shop$Char2)
# First attempt
sapply(shop$Char, function(x) any(sapply(shop$Char2, str_detect, string = x)))
# Second attempt
str_detect(shop$Char, paste(shop$Char2, collapse = '|'))
Я получаю эти результаты:
sapply(shop$Char, function(x) any(sapply(shop$Char2, str_detect, string = x)))
good apples bag of apples bag of sugar milk x2
FALSE FALSE TRUE FALSE
str_detect(shop$Char, paste(shop$Char2, collapse = '|'))
FALSE FALSE TRUE FALSE
Однако я ищу эти результаты:
ЛОЖНО ИСТИНА ИСТИНА
1) ЛОЖЬ, потому что соответствует только 1 слову
2) ИСТИНА потому что "мешок" в обоих
3) ИСТИНА, потому что "мешок" в обоих
4) ИСТИНА, потому что "молоко х2" в обоих