tidyr

In package tidyr , question about `separate_longer_delim` can't recycle input


In below code , separate_longer_delim return error message

In row 2, can't recycle input of size 4 to size 6.

how to fix it ? Thanks!

library(tidyverse)
ori_df <- data.frame(
  Cat_A = c("BDW","A_B_W_F"),
  Cat_B = c("AWS","OVS"),
  Cat_C = c("CATA","CATB"),
  Cat_D = c("ABCDE","PBCD"),
  Weight = c("1kg_2kg_3kg_4kg","1kg_2kg_3kg_5kg_10kg_20kg"),
  Country = c("澳洲_德国_法国_加拿大_美国_日本_西班牙_意大利_英国",
              "巴西_德国_俄罗斯_法国_加拿大_美国_日本_西班牙_意大利_英国"))

ori_df %>% separate_longer_delim(c('Cat_A','Weight','Country'),delim="_")

Solution

  • Not very elegant but a step-wise split does the job:

    library(tidyverse)
    ori_df <- data.frame(
      Cat_A = c("BDW","A_B_W_F"),
      Cat_B = c("AWS","OVS"),
      Cat_C = c("CATA","CATB"),
      Cat_D = c("ABCDE","PBCD"),
      Weight = c("1kg_2kg_3kg_4kg","1kg_2kg_3kg_5kg_10kg_20kg"),
      Country = c("澳洲_德国_法国_加拿大_美国_日本_西班牙_意大利_英国",
                  "巴西_德国_俄罗斯_法国_加拿大_美国_日本_西班牙_意大利_英国"))
    ori_df %>% 
      separate_longer_delim(c('Weight'),delim="_") %>% 
      separate_longer_delim(c('Cat_A'), delim="_") %>% 
      separate_longer_delim(c('Country'),delim="_") %>% 
      head(., n=20)
    #>    Cat_A Cat_B Cat_C Cat_D Weight Country
    #> 1    BDW   AWS  CATA ABCDE    1kg    澳洲
    #> 2    BDW   AWS  CATA ABCDE    1kg    德国
    #> 3    BDW   AWS  CATA ABCDE    1kg    法国
    #> 4    BDW   AWS  CATA ABCDE    1kg  加拿大
    #> 5    BDW   AWS  CATA ABCDE    1kg    美国
    #> 6    BDW   AWS  CATA ABCDE    1kg    日本
    #> 7    BDW   AWS  CATA ABCDE    1kg  西班牙
    #> 8    BDW   AWS  CATA ABCDE    1kg  意大利
    #> 9    BDW   AWS  CATA ABCDE    1kg    英国
    #> 10   BDW   AWS  CATA ABCDE    2kg    澳洲
    #> 11   BDW   AWS  CATA ABCDE    2kg    德国
    #> 12   BDW   AWS  CATA ABCDE    2kg    法国
    #> 13   BDW   AWS  CATA ABCDE    2kg  加拿大
    #> 14   BDW   AWS  CATA ABCDE    2kg    美国
    #> 15   BDW   AWS  CATA ABCDE    2kg    日本
    #> 16   BDW   AWS  CATA ABCDE    2kg  西班牙
    #> 17   BDW   AWS  CATA ABCDE    2kg  意大利
    #> 18   BDW   AWS  CATA ABCDE    2kg    英国
    #> 19   BDW   AWS  CATA ABCDE    3kg    澳洲
    #> 20   BDW   AWS  CATA ABCDE    3kg    德国
    
    Created on 2024-10-18 with reprex v2.1.1