Посчитайте Вхождение слова, Всего слов и Всего уникальных слов в R - PullRequest
0 голосов
/ 10 января 2019

У меня есть огромный df, который имеет doc_id и word, и каждый word может содержать несколько class(Class_1,Class_2,Class_3 ), поэтому, если слово находится в этом class, я помещаю туда 1 или если не тогда 0

SAMFLE 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, я хочу count количество вхождений word в class(Class_1,Class_2,Class_3).
Всего слов в каждом class(Class_1,Class_2,Class_3), eg:, например, сколько words есть в Class_1
и, наконец, всего 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_2 и Class_3
Totl_1 = Всего слов в Class_1 и то же самое для других Class_2 и Class_3
Unique_words = общее количество уникальных слов во всех документах

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Используя 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_id и word, иначе выходной набор данных был бы отсортирован в алфавитном порядке по word.

0 голосов
/ 10 января 2019

Установить эти пакеты:

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.

...