Tidy method to split multiple columns using tidyr::separate

后端 未结 5 999
别跟我提以往
别跟我提以往 2021-01-14 19:08

I have a data frame like so:

df <- structure(list(A = c(\"3 of 5\", \"1 of 2\", \"1 of 3\", \"1 of 3\", 
\"3 of 4\", \"2 of 7\"), B = c(\"2 of 2\", \"2 of         


        
5条回答
  •  傲寒
    傲寒 (楼主)
    2021-01-14 19:42

    Could try:

    library(tidyverse)
    
    names(df) %>%
      map(
        function(x) 
          df %>% 
          select(x) %>% 
          separate(x, 
                   into = paste0(x, c("_attempted", "_landed")), 
                   sep = " of ")
        ) %>%
      bind_cols()
    

    Output:

    # A tibble: 6 x 10
      A_attempted A_landed B_attempted B_landed C_attempted C_landed D_attempted D_landed E_attempted E_landed
                                                            
    1 3           5        2           2        10          21       0           0        8           16      
    2 1           2        2           4        3           14       0           0        3           15      
    3 1           3        0           1        11          34       0           0        10          32      
    4 1           3        0           0        10          35       0           0        6           28      
    5 3           4        0           0        16          53       0           0        13          49      
    6 2           7        0           0        17          62       0           0        9           48      
    

    As OP suggests we can indeed avoid the last step with map_dfc:

    names(df) %>% 
      map_dfc(~ df %>% 
                 select(.x) %>% 
                 separate(.x, 
                          into = paste0(.x, c("_attempted", "_landed")), 
                          sep = " of ")
               )
    

提交回复
热议问题