【问题标题】:Convert sentences to words in R将句子转换为 R 中的单词
【发布时间】:2017-07-16 00:32:28
【问题描述】:

我有一个列形式的数据框 - 输入

Id  Comment
xc545   Ronald is a great person 
g6548   Hero worship is bad

我需要以下形式的输出 结果

Id  Words 
xc545   Ronald
xc545   is
xc545   a
xc545   great
xc545   person
g6548   Hero
g6548   worship
g6548   is
g6548   bad

需要一个 R 语句来执行这个。

以下是我尝试过的 -

result<-lapply(input,function(x)strsplit(x[2]," "))

但是这只会返回一条记录。

【问题讨论】:

  • 请问你为什么要这个?这可能会确定数据框是否是您数据的最佳结构。
  • 我想在整个句子中搜索产品名称并标记它们。我在另一个表列中有产品名称(200,000)。 SQL 比较需要很长时间。

标签: r


【解决方案1】:

假设DF 是您的data.frame,可能是:

> List <- strsplit(DF$Comment, " ")
> data.frame(Id=rep(DF$Id, sapply(List, length)), Words=unlist(List))
     Id   Words
1 xc545  Ronald
2 xc545      is
3 xc545       a
4 xc545   great
5 xc545  person
6 g6548    Hero
7 g6548 worship
8 g6548      is
9 g6548     bad

请注意,我的回答仅在每对单词之间有一个简单空格时才有效。

【讨论】:

    【解决方案2】:

    一个源自thisdata.table 解决方案:

    library(data.table)
    dt = data.table(df)
    dt[,c(Words=strsplit(Comment, " ", fixed = TRUE)), by = Id]
    Id      V1
    1: xc545  Ronald
    2: xc545      is
    3: xc545       a
    4: xc545   great
    5: xc545  person
    6: g6548    Hero
    7: g6548 worship
    8: g6548      is
    9: g6548     bad
    

    【讨论】:

      【解决方案3】:

      使用scantapplystack

      d <- read.table(text='Id  Comment
      xc545   "Ronald is a great person"
      g6548   "Hero worship is bad"', header=TRUE, as.is=TRUE)
      
      stack(tapply(d$Comment, d$Id, function(x) scan(text=x, what='')))
      #    values   ind
      # 1    Hero g6548
      # 2 worship g6548
      # 3      is g6548
      # 4     bad g6548
      # 5  Ronald xc545
      # 6      is xc545
      # 7       a xc545
      # 8   great xc545
      # 9  person xc545
      

      【讨论】:

        猜你喜欢
        • 2010-10-11
        • 2011-11-22
        • 2012-01-18
        • 2020-04-26
        • 1970-01-01
        • 2019-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多