【问题标题】:Count the Occurence of word,Total words and total Unique words in R计算单词的出现次数、总单词数和 R 中唯一单词总数
【发布时间】:2019-01-10 12:49:44
【问题描述】:

我有一个巨大的df,其中有一个doc_idword,每个word 可以包含多个class(Class_1,Class_2,Class_3 ),所以如果一个词在那个class 中,我把1 放在那里或者如果然后不是0

样本 DF

doc_id   word       Class_1   Class_2   Class_3 
104      saturn       1         0         1
104      survival     1         1         0
104      saturn       1         0         1
104      car          0         1         0  
118      baseball     1         1         0
118      color        0         0         1
118      muscle       0         1         0
187      image        1         0         0
187      pulled       0         0         0
187      game         1         0         1
187      play         0         0         1 
187      game         1         1         0 
125      translation  1         0         0  
125      survival     0         1         0
125      input        1         0         1      
125      excellent    1         0         0 
142      nice         0         1         0
142      article      0         1         0 
142      original     1         0         1
142      content      0         1         0

现在使用这个sample DF 我想countclass(Class_1,Class_2,Class_3) 中出现word 的次数。
每个class(Class_1,Class_2,Class_3)eg: 中的总字数比如Class_1 中有多少words
最后在所有文档中总计unique words

OUTPUT DF应该是这样的

doc_id   word       Occ_1  Occ_2  Occ_3  Totl_1  Totl_2  Totl_3  Unique_words 
104      saturn       2      0      2      11     9       7       17
104      survival     1      2      0      11     9       7       17
104      car          0      1      0      11     9       7       17
118      baseball     1      1      0      11     9       7       17
118      color        0      0      1      11     9       7       17
118      muscle       0      1      0      11     9       7       17
187      image        1      0      0      11     9       7       17
187      pulled       0      0      0      11     9       7       17  
187      game         2      1      1      11     9       7       17
187      play         0      0      1      11     9       7       17
125      translation  1      0      0      11     9       7       17 
125      input        1      0      1      11     9       7       17
125      excellent    1      0      0      11     9       7       17
142      nice         0      1      0      11     9       7       17
142      article      0      1      0      11     9       7       17 
142      original     1      0      1      11     9       7       17
142      content      0      1      0      11     9       7       17


Occ_1 = Class_1 中的单词出现次数,其他 Class_2Class_3 相同
Totl_1 = @987654345 中的总单词@ 和其他 Class_2Class_3
Unique_words 相同 = 所有文档中唯一单词的总数

【问题讨论】:

    标签: r dplyr data.table tidyverse tidytext


    【解决方案1】:

    使用dplyr,您可以运行以下行:

    library(dplyr)
    
    data %>%
      group_by(word) %>%
      summarise(
        doc_id = first(doc_id),
        Occ_1 = sum(Class_1),
        Occ_2 = sum(Class_2),
        Occ_3 = sum(Class_3)
      ) %>%
      arrange(doc_id, word) %>%
      mutate(
        Totl_1 = sum(Occ_1),
        Totl_2 = sum(Occ_2),
        Totl_3 = sum(Occ_3),
        Unique_words = n()
      )
    

    输出

       word        doc_id Occ_1 Occ_2 Occ_3 Totl_1 Totl_2 Totl_3 Unique_words
       <chr>       <chr>  <dbl> <dbl> <dbl>  <dbl>  <dbl>  <dbl>        <int>
     1 car         104        0     1     0     11      9      7           17
     2 saturn      104        2     0     2     11      9      7           17
     3 survival    104        1     2     0     11      9      7           17
     4 baseball    118        1     1     0     11      9      7           17
     5 color       118        0     0     1     11      9      7           17
     6 muscle      118        0     1     0     11      9      7           17
     7 excellent   125        1     0     0     11      9      7           17
     8 input       125        1     0     1     11      9      7           17
     9 translation 125        1     0     0     11      9      7           17
    10 article     142        0     1     0     11      9      7           17
    11 content     142        0     1     0     11      9      7           17
    12 nice        142        0     1     0     11      9      7           17
    13 original    142        1     0     1     11      9      7           17
    14 game        187        2     1     1     11      9      7           17
    15 image       187        1     0     0     11      9      7           17
    16 play        187        0     0     1     11      9      7           17
    17 pulled      187        0     0     0     11      9      7           17
    

    我添加了一个arrange 函数,以便按doc_idword 对您的数据集进行排序,否则输出数据集将按word 的字母顺序排序。

    【讨论】:

    • 好的,我会想办法解决的
    • @jamesjoyce 我已经在代码中添加了几行代码,现在它应该可以按您的意愿工作了。
    【解决方案2】:

    安装这些软件包:

    necessary_packages <-
      c("dplyr", "tiydr")
    new_packages <-
      necessary_packages[!(necessary_packages %in% installed.packages()[, "Package"])]
    if (length(new_packages) > 0) {
      install.packages(new_packages, dependencies = TRUE)
    }
    lapply(necessary_packages, require, character.only = TRUE)
    

    现在让我们计算单词并重塑你的 df:

    df <- 
    df %>%
    gather("class", "n", 3:6) %>%
    group_by(word, class) %>%
    mutate(occ = sum(n)) %>%
    ungroup() %>%
    group_by(class) %>%
    mutate(class_totl = sum(n)) %>%
    ungroup() %>% 
    mutate(Unique_words = sum(n)) %>%
    select(doc_id, word, occ, class_total, Unique_words) %>%
    gather(variable, value, 3:6) %>%
    spread(variable, value)
    

    注意:我没有运行上面的代码,因为你没有提供代码来构建你的 df。

    【讨论】:

    • inds_combine(.vars, ind_list) 中的错误:位置必须在 0 和 n 之间
    • ##换行;收集(变量,值,3:6)%>% 收集(变量,值,3:5)%>%
    • 仍然无法正常工作..感谢您的宝贵时间..@Ric S 已被标记
    猜你喜欢
    • 1970-01-01
    • 2021-11-17
    • 2015-11-28
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    相关资源
    最近更新 更多