从另一个包含R中元素列表的数据框中的a.character列创建一个数据框

时间:2020-05-15 15:26:28

标签: r dataframe

我有以下数据帧(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中创建一系列假人,然后将其乘以得分,然后将每列的元素求和。 预先感谢您的帮助

1 个答案:

答案 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