所以我有一个数据集,其中每段文字都被标记为“正”,“中性”或“负”。然后,每段文本都分配一个ID。每个ID都链接到上述标记值的多行。现在,我希望能够以正/正+负+中性(总)的比率创建2个新列。和负数/总数的比率。
我想出了如何查看矩阵中每个id的标签出现频率的方法。但是我不知道如何编写一个脚本来对矩阵中的频率数进行计算。
我正在使用的数据框示例:
category_senti artist_id
Positive 01_artist
Negative 01_artist
Positive 02_artist
Negative 02_artist
Neutral 02_artist
Negative 03_artist
Positive 03_artist
Neutral 03_artist
Negative 03_artist
Neutral 03_artist
Negative 04_artist
Positive 04_artist
..... .....
..... 23_artist
到目前为止,我一直在尝试成功,因为您可以看到每个artist_id标签的出现频率。但是我需要能够使用自定义的书面函数中的频率进行计算。
data[data$artist_id == "03_artist",] %>% group_by(category_senti) %>% summarise(n=n())
# A tibble: 3 x 2
category_senti n
<fct> <int>
1 Negative 59
2 Neutral 157
3 Positive 165
我希望创建两个新的数据框: 数据$ pos_ratio和数据$ neg_ratio以及标签'Pos','Neg'出现的时间的相应比率除以每个artist_id的总数。
因此理想情况下,pos_ratio数据帧应如下所示:
artist_id pos_ratio
01_artist 0.4764
02_artist 0.3566
03_artist 0.8472
04_artist 0.3058
05_artist 0.2056
06_artist 0.2534
..... ......
谢谢!
答案 0 :(得分:1)
我们可以按'artist_id'分组,创建带有频率计数的列'n',然后按'category_senti'分组,取频率与之前创建的频率列的比率,然后按'category_senti'除以list
个data.frames
library(dplyr)
data %>%
group_by(artist_id) %>%
mutate(n = n()) %>%
group_by(category_senti, add = TRUE) %>%
summarise(ratio = n()/n[1]) %>%
ungroup %>%
group_split(category_senti, keep = FALSE)
答案 1 :(得分:1)
您可以使用mean(category_senti == 'Positive')
计算正值的比率,对于负数可以计算出相似的比率。
library(data.table)
setDT(df)
out <-
df[, .(pos_ratio = mean(category_senti == 'Positive'),
neg_ratio = mean(category_senti == 'Negative'))
, by = artist_id]
# artist_id pos_ratio neg_ratio
# 1: 01_artist 0.5000000 0.5000000
# 2: 02_artist 0.3333333 0.3333333
# 3: 03_artist 0.2000000 0.4000000
# 4: 04_artist 0.5000000 0.5000000
如果要将正值或负值视为单独的数据集,则可以仅对out
进行子集
out[, .(artist_id, neg_ratio)]
# artist_id neg_ratio
# 1: 01_artist 0.5000000
# 2: 02_artist 0.3333333
# 3: 03_artist 0.4000000
# 4: 04_artist 0.5000000
使用的数据
df <- fread('
category_senti artist_id
Positive 01_artist
Negative 01_artist
Positive 02_artist
Negative 02_artist
Neutral 02_artist
Negative 03_artist
Positive 03_artist
Neutral 03_artist
Negative 03_artist
Neutral 03_artist
Negative 04_artist
Positive 04_artist
')