统计R中词的出现次数、总词数和总不重复词数
Count the Occurence of word,Total words and total Unique words in R
我有一个巨大的 df
,它有一个 doc_id
和 word
,每个 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
我想 count
class(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_2
和 Class_3
中的单词出现次数相同
Totl_1
= Class_1
中的总字数,其他 Class_2
和 Class_3
中的字数相同
Unique_words
= 所有文档中唯一单词的总数
安装这些包:
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的代码。
使用 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
的字母顺序排序。
我有一个巨大的 df
,它有一个 doc_id
和 word
,每个 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
我想 count
class(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_2
和 Class_3
中的单词出现次数相同
Totl_1
= Class_1
中的总字数,其他 Class_2
和 Class_3
中的字数相同
Unique_words
= 所有文档中唯一单词的总数
安装这些包:
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的代码。
使用 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
的字母顺序排序。