Извлечение подстроки из вектора в R

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

countries <- c("United States", "Israel", "Canada")

Как мне пройти этот вектор значений символов, чтобы извлечь точные совпадения из неструктурированного текста.

text.df <- data.frame(ID = c(1:5), 
text = c("United States is a match", "Not a match", "Not a match",
         "Israel is a match", "Canada is a match"))

В этом примере желаемый результат будет:

ID     text
1      United States
4      Israel
5      Canada

До сих пор я работал сgsub&nbsp;где я удаляю все несоответствия, а затем удаляю и удаляю строки с пустыми значениями. Я также работал сstr_extract&nbsp;из пакета stringr, но не удалось получить правильные выражения для регулярного выражения. Будем очень благодарны любой помощи!