我有一个庞大的df
,其中有一个doc_id
和word
,每个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 DF
中count
发生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_1
和Class_2
中出现Word的次数
Class_3
= Totl_1
中的单词总数,其他Class_1
和Class_2
中的单词总数
Class_3
=所有文档中的唯一词总数
答案 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_id
和word
对您的数据集进行排序,否则输出数据集将按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 %>%
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)