在 tidyr 包中,有关 `separate_longer_delim` 无法回收输入的问题

问题描述 投票:0回答:1

在下面的代码中,

separate_longer_delim
返回错误消息

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

如何解决?谢谢!

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="_")
tidyr
1个回答
0
投票

不是很优雅,但逐步拆分可以完成工作:

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
© www.soinside.com 2019 - 2024. All rights reserved.