【问题标题】:How to generate strings from a data frame of word frequencies如何从词频数据框中生成字符串
【发布时间】:2016-05-06 04:31:42
【问题描述】:

假设我有以下包含词频的数据框:

      Bob   Joe Go  Eat Run
doc1    2   0   0   1   2 
doc2    0   1   1   2   0

我需要生成一个char向量如下:

chr[1:2] "Bob Bob Eat Run Run"
         "Joe Go Eat Eat"

【问题讨论】:

    标签: r dataframe word-frequency


    【解决方案1】:

    您可以尝试以下方法:

    df <- data.frame(Bob = c(2, 0), Joe = c(0, 1), Go = c(0, 1), Eat = c(1, 2), Run = c(2, 0))
    row.names(df) <- c('doc1', 'doc2')
    df
         Bob Joe Go Eat Run
    doc1   2   0  0   1   2
    doc2   0   1  1   2   0
    
    apply(df, 1, function(x) paste(rep(names(df), x), collapse = ' '))
                     doc1                  doc2 
    "Bob Bob Eat Run Run"      "Joe Go Eat Eat" 
    

    如果你不喜欢上面的“命名”向量,并且想要一个直字符向量,你可以这样做:

    as.character(apply(df, 1, function(x) paste(rep(names(df), x), collapse = ' ')))
    [1] "Bob Bob Eat Run Run" "Joe Go Eat Eat"    
    

    【讨论】:

      【解决方案2】:

      这是一个使用data.table 的选项。将'data.frame'转换为'data.table',按行序列分组,unlist列,复制df的列名, 然后paste它一起。

      library(data.table)
      setDT(df)[, toString(rep(names(df), unlist(.SD))) ,1:nrow(df)]$V1
      #[1] "Bob, Bob, Eat, Run, Run" "Joe, Go, Eat, Eat"    
      

      或者使用来自base Rtapply

      tapply(unlist(df), row(df), FUN= function(x) 
                           toString(rep(names(df), x)))
      

      【讨论】:

        猜你喜欢
        • 2018-01-30
        • 1970-01-01
        • 1970-01-01
        • 2012-09-27
        • 2015-07-24
        • 2014-10-23
        • 1970-01-01
        • 1970-01-01
        • 2017-02-11
        相关资源
        最近更新 更多