计算单词的出现率,R中的单词总数和唯一单词总数

时间:2019-01-10 12:49:45

标签: r dplyr data.table tidyverse tidytext

我有一个庞大的df,其中有一个doc_idword,每个word可以包含多个class(Class_1,Class_2,Class_3 ),因此,如果其中一个词是{ {1}}我把class放在这里,如果没有,就把1

样本DF

0

现在使用此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 DFcount发生word的次数。
每个class(Class_1,Class_2,Class_3)class(Class_1,Class_2,Class_3)中的单词总数,就像eg:中有多少words
最后是所有文档中的Class_1

输出DF 应该是这样的

unique words

位置
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中出现Word的次数,其他Class_1Class_2中出现Word的次数
Class_3 = Totl_1中的单词总数,其他Class_1Class_2中的单词总数
Class_3 =所有文档中的唯一词总数

2 个答案:

答案 0 :(得分:2)

使用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的字母顺序进行排序。

答案 1 :(得分:1)

安装这些软件包:

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的代码。