代码之家  ›  专栏  ›  技术社区  ›  anderwyang

如何避免tidyr::complete()中的输入变量名

  •  0
  • anderwyang  · 技术社区  · 7 月前

    在tidyr::complete中,我必须输入变量名,如何避免呢?实际上,变量有很多,一个接一个地输入很无聊。。。有人能帮忙吗?谢谢

    library(tidyverse)
        raw_df <- data.frame(cat=c('A','B','C'),sub_category=c('1','2','3'))
    

    输入变量名,代码运行良好

     raw_df %>% tidyr::complete(cat,sub_category)
    

    下面的代码无法工作——这是我希望的输入方式

     raw_df %>% tidyr::complete()
    
    2 回复  |  直到 7 月前
        1
  •  1
  •   Andy Baxter    7 月前

    一种稍微不同的方法是使用 expand_grid 并传入使用解压缩的数据帧的所有列 !!! 通过匿名功能。这是有效的,但其他人可能有更简单的方法可以建议!

    library(tidyverse)
    
    raw_df <- data.frame(cat=c('A','B','C'),sub_category=c('1','2','3'))
    
    raw_df |>
      (\(df) expand_grid(!!!df))()
    #> # A tibble: 9 × 2
    #>   cat   sub_category
    #>   <chr> <chr>       
    #> 1 A     1           
    #> 2 A     2           
    #> 3 A     3           
    #> 4 B     1           
    #> 5 B     2           
    #> 6 B     3           
    #> 7 C     1           
    #> 8 C     2           
    #> 9 C     3
    
        2
  •  0
  •   Dmitry Zotikov    7 月前
    > tidyr::crossing(cat=c('A','B','C'),sub_category=c('1','2','3'))
    # A tibble: 9 × 2
      cat   sub_category
      <chr> <chr>
    1 A     1
    2 A     2
    3 A     3
    4 B     1
    5 B     2
    6 B     3
    7 C     1
    8 C     2
    9 C     3
    >