【问题标题】:Merging R dataframes with word counts (of unequal length) - Text mining将 R 数据帧与字数(长度不等)合并 - 文本挖掘
【发布时间】:2021-01-04 12:06:23
【问题描述】:

对于我的文本挖掘任务,我正在尝试使用三个单独文本的字数(我已经过滤和标记化)创建一个矩阵。我知道每个文本都有这个数据框:

word          count
film             82
camera           18
director         10
action            5
character         2

我还创建了一个列表,将三个文本的所有单词组合在一起,字数组合在一起,但我试图达到这样的效果:

word           text1.       text2.        text3. 
film.             82.         16.           8
camera.           18.         76.           3
director.         10.          2.           91
character.        2.           20.          0
screen.           0.           4.           10
movie.            12.          0.           0
action.           5.           23.          54
dance.            0.           1.           16

为此使用什么代码?如上面的示例所示,我想为文本中没有出现数字“0”的每个单词填写。我总共有大约 4459 个单词,文本分别有 1804、1522 和 1133 个单词。

提前非常感谢!

【问题讨论】:

    标签: r merge text-mining word-count


    【解决方案1】:

    如果您已经数过三张桌子。然后你只需要对这些表进行完全合并,然后删除 NA。喜欢

    library(dplyr)
    
    first <- data.frame(word = sample(letters, 10),
                    count = sample(1:100, 10))
    
    second <- data.frame(word = sample(letters, 10),
                    count = sample(1:100, 10))
    
    third <- data.frame(word = sample(letters, 10),
                    count = sample(1:100, 10))
    
    combined <- merge(first, second, by = "word", all = TRUE)
    combined <- merge(combined, third, by = "word", all = TRUE)
      
    combined %>% 
      mutate_all(.funs = function(x){
        ifelse(is.na(x),0, x)
      })
    
    

    【讨论】:

      【解决方案2】:

      使用dplyrtidyr 的解决方案

      library(dplyr)
      library(tidyr)
      
      full_join(df1, df2, by = "word", suffix = c(".text1", ".text2")) %>%
         full_join(., df3, by = "word") %>%
         rename(count.text3 = count) %>%
         mutate_at(vars(count.text1:count.text3), tidyr::replace_na, 0)
      #>        word count.text1 count.text2 count.text3
      #> 1      film          82          16           8
      #> 2    camera          18          76           3
      #> 3  director          10           2          91
      #> 4    action           5          23          54
      #> 5 character           2          20           0
      #> 6    screen           0           4          10
      #> 7     dance           0           1          16
      

      模拟您的数据示例

      df1 <- data.frame(
         word = c("film", "camera", "director", "action", "character"),       
         count = c(82, 18, 10, 5, 2)
      )
      
      df2 <- data.frame(
         word = c("film", "camera", "director", "character", "screen", "action", "dance"),       
         count = c(16, 76, 2, 20, 4, 23, 1)
      )
      
      df3 <- data.frame(
         word = c("film", "camera", "director", "screen", "action", "dance"),       
         count = c(8, 3, 91, 10, 54, 16)
      )
      
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-07
        • 2011-06-16
        • 2012-05-01
        • 2012-07-01
        • 1970-01-01
        • 2017-03-18
        相关资源
        最近更新 更多