Обнаружение списка слов в строковой переменной и извлечение совпадающих слов в новую переменную во фрейме данных

У меня есть два кадра данных переменных, один из которых является вектором символов. Каждая строка в «MyVector» содержит строку с одним именем (например, «Пит»). Имя может отличаться по своему положению в строке символов. Я хочу создать код, который будет сопоставлять имя в списке с именем в строке символов и извлекать это имя в новую переменную во фрейме данных. Если бы имя всегда находилось в одной и той же позиции в векторе MyVector, я бы создал новую переменную как подстроку MyVector, вытащив имя в новый столбец. Я пробовал различные версии str_detect от Stringr, но безрезультатно.

Задача: как определить или извлечь имя в новую переменную и поместить ее в MyDF, если имя находится в нескольких позициях?

#Create the data frame
var.1 <-rep(c(1,5,3),2)

MyVector <- c("I know Pete", "Jerry has a new job","Victor is an employee","How to work with Pete","Too Many Students","Bob is mean")
   MyDF <-as.data.frame(cbind(var.1,MyVector))

#Create a vector of a list of names I want to extract into a new column in the dataframe.
Extract <- c("Jerry","Pete", "Bob", "Victor")

#Match would be perfect if I could use it on character vectors
MyDF$newvar <-match(MyDF$MyVector,Extract)

Мой последний файл data.frame должен выглядеть примерно так, как показано ниже.

 var.1                     MyVector NEWVAR
1     1               Don knows Pete   Pete
2     5          Jerry has a new job  Jerry
3     3 Victor and Bob are employees Victor
4     1        How to work with Pete   Pete
5     5            Too Many Students     NA
6     3                  Bob is mean    Bob

person RareAir    schedule 10.08.2016    source источник


Ответы (1)


Мы можем использовать str_extract после paste объединения 'Extract' вместе

library(stringr)
MyDF$NEWVAR <- str_extract(MyDF$MyVector, paste(Extract, collapse="|"))
MyDF$NEWVAR
#[1] "Pete"   "Jerry"  "Victor" "Pete"   NA       "Bob"   
person akrun    schedule 10.08.2016
comment
Как бы вы извлекли два слова из строки? Например, строка 3 в примере OP содержит Виктора и Боба, но в вашем ответе возвращается только Виктор. Спасибо. - person Seanosapien; 14.10.2017
comment
@Seanosapien str_extract извлекает только первое совпадение. Для множественного извлечения используйте str_extract_all - person akrun; 05.05.2020
comment
Спасибо @akrun. Как определяется первый матч? Почему Виктора выбрали вместо Боба? - person Seanosapien; 07.05.2020
comment
Бывает. перед Бобом в предложении - person akrun; 07.05.2020