Search code examples
rdataframedcast

Prevent dcast from aggregating data


I have data like:

rating       title
5            Bean
5            Bean
4            Bean
5            Bean
5            Egg
4            Egg
3            Bacon
2            Bacon

And I want to dcast like

dcast(data, rating ~ title, value.var="rating")

So the titles become the column headers, and the ratings for each title are listed below. However, every time it aggregates them instead, but I don't want this.


Solution

  • read.table(text="rating       title
    5            Bean
    5            Bean
    4            Bean
    5            Bean
    5            Egg
    4            Egg
    3            Bacon
    2            Bacon", header=TRUE, stringsAsFactors=FALSE) %>%
      dplyr::mutate(id = 1:n()) %>% 
      tidyr::spread(title, rating, fill = 0) %>% 
      dplyr::select(-id)
    ##   Bacon Bean Egg
    ## 1     0    5   0
    ## 2     0    5   0
    ## 3     0    4   0
    ## 4     0    5   0
    ## 5     0    0   5
    ## 6     0    0   4
    ## 7     3    0   0
    ## 8     2    0   0