【问题标题】:searching for texting and storing results in new columns within the dataframe搜索文本并将结果存储在数据框中的新列中
【发布时间】:2022-01-16 13:40:11
【问题描述】:

我有一个包含一列的数据框 (df1),每个条目/行/观察由一长串文本 (df1$text) 组成。在一个单独的数据框 (df2) 中,我有一列,每个条目/行/观察由一个名称 (df2$name) 组成。

我想为 df1 中的每一行注明 df2$name 中的哪些名称出现在文本中。理想情况下,我想将名称是否出现在 df1$text 中存储为 1/0 值,该值存储在 df1 的新列(即虚拟变量)中,以该名称命名:

> df1
  text
1 ...
2 ...
3 ...
4 ...

> df2
   name
1  John
2  James
3  Jerry
4  Jackson

代码执行后:

> df1
  text John James Jerry Jackson 
1 ...   1    1     0        1
2 ...   0    0     0        1 
3 ...   1    1     0        1
4 ...   1    0     0        1

有没有办法在不使用 for 循环的情况下做到这一点?我的文本字段很长,我在 df1 和 df2 中都有很多观察结果。

【问题讨论】:

    标签: r dataframe for-loop text-mining grepl


    【解决方案1】:

    使用lapply 的基本 R 选项 -

    df1[df2$name] <- lapply(df2$name, function(x) +(grepl(x, df1$text)))
    

    如果您希望匹配不区分大小写,请在grepl 中添加ignore.case = TRUE

    【讨论】:

    • 谢谢,效果很好!
    【解决方案2】:

    我不确定您是否提供了可重现的示例。所以,我自己做了虚拟数据df1 喜欢

    df1 <- data.frame(
      text = c("John James John Jakson",
               "Jackson abcd zxcv",
               "John Jackson James Jerr aa",
               "John Jackson JAJAJAJA")
    )
    
                            text
    1     John James John Jakson
    2          Jackson abcd zxcv
    3 John Jackson James Jerr aa
    4      John Jackson JAJAJAJA
    

    那你可以试试dplyrlike

    library(dplyr)
    
    df1 %>%
      mutate(John = as.numeric(grepl("John", text)),
             James = as.numeric(grepl("James", text)),
             Jerry = as.numeric(grepl("Jerry", text)),
             Jackson = as.numeric(grepl("Jackson", text))
             )
    
                            text John James Jerry Jackson
    1     John James John Jakson    1     1     0       0
    2          Jackson abcd zxcv    0     0     0       1
    3 John Jackson James Jerr aa    1     1     0       1
    4      John Jackson JAJAJAJA    1     0     0       1
    

    【讨论】:

    • 谢谢!唯一的问题是我在 df2 中有 70 多个名字,所以希望能自动化这个过程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 2011-03-16
    • 2021-07-28
    • 1970-01-01
    • 2020-05-25
    相关资源
    最近更新 更多