【问题标题】:Detect a list of words in a string variable and extract matched words to a new variable in data frame检测字符串变量中的单词列表并将匹配的单词提取到数据框中的新变量中
【发布时间】:2016-12-17 05:22:38
【问题描述】:

我有两个变量数据帧,其中一个是字符向量。 “MyVector”中的每一行都包含一个只有一个名称的字符串(即“Pete”)。名称在字符串中的位置可能会有所不同。我想创建将列表中的名称与字符串中的名称匹配的代码,并将该名称提取到数据框中的新变量中。 如果名称始终在向量“MyVector”中的相同位置,我将创建一个新变量作为 MyVector 的子字符串,将名称拉出到新列中。 我从 Stringr 尝试了各种版本的 str_detect,但无济于事。

挑战:如果名称位于多个位置,我如何检测或提取名称到新变量中并将其放入 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

【问题讨论】:

    标签: r dplyr stringr


    【解决方案1】:

    我们可以在paste一起“提取”之后使用str_extract

    library(stringr)
    MyDF$NEWVAR <- str_extract(MyDF$MyVector, paste(Extract, collapse="|"))
    MyDF$NEWVAR
    #[1] "Pete"   "Jerry"  "Victor" "Pete"   NA       "Bob"   
    

    【讨论】:

    • 如何从字符串中提取两个单词?例如,OP 示例中的第 3 行包含 Victor 和 Bob,但您的答案中仅返回 Victor。谢谢。
    • @Seanosapien str_extract 仅提取第一个匹配项。对于多次提取,使用str_extract_all
    • 谢谢@akrun。第一场比赛是如何确定的?为什么选择维克多而不是鲍勃?
    • 它来了。在鲍勃之前的句子
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 2021-10-19
    相关资源
    最近更新 更多