Reshape multiple categorical variables to binary response variables

前端 未结 5 1615
醉话见心
醉话见心 2020-12-01 16:55

I am trying to convert the following format:

mydata <- data.frame(movie = c(\"Titanic\", \"Departed\"), 
                     actor1 = c(\"Leo\", \"Jack\"         


        
5条回答
  •  野趣味
    野趣味 (楼主)
    2020-12-01 17:22

    An updated tidyr-based option is to convert to long-shape, use complete to fill in missing combinations of movies and actors, and then just convert a logical is.na test to a numeric value. Then reshape back to wide.

    library(tidyr)
    
    mydata %>%
      pivot_longer(starts_with("actor"), names_to = "acted") %>%
      complete(movie, value) %>%
      dplyr::mutate(acted = as.numeric(!is.na(acted))) %>%
      pivot_wider(names_from = value, values_from = acted)
    #> # A tibble: 2 x 4
    #>   movie     Jack   Leo  Kate
    #>         
    #> 1 Departed     1     1     0
    #> 2 Titanic      0     1     1
    

提交回复
热议问题