我有以下数据帧(dt)
id genre score
1 "action & adventure, sci-fi, comedy" 10
2 "sci-fi" 7
3 "action & adventure" 8
4 "fantasy, comedy" 2
...
我基本上想创建一个表,其中包含每个流派以及每个流派的得分总和的平均得分
在这种情况下应该是
genre score
action & adventure 18
sci-fi 17
fantasy 2
comedy 12
我肯定有一些优雅的方法可以做到,但是我唯一能想到的就是为每种类型在dt中创建一系列假人,然后将其乘以得分,然后将每列的元素求和。 预先感谢您的帮助
答案 0 :(得分:2)
dplyr方式...
library(tidyverse)
d %>% separate_rows(genre,sep = ",") %>%
mutate_at(vars(genre), str_trim) %>%
group_by(genre) %>%
summarise(sum_score = sum(score, na.rm = T),
mean_score = mean(score, na.rm = T))
输出为
# A tibble: 4 x 3
genre sum_score mean_score
<chr> <dbl> <dbl>
1 action & adventure 18 9
2 comedy 12 6
3 fantasy 2 2
4 sci-fi 17 8.5