【问题标题】:R unnest multiple columnsR取消嵌套多列
【发布时间】:2023-04-06 03:11:02
【问题描述】:

任何功能性方法可以取消嵌套不同大小的多个列?

例子:

library(tidyr)
library(dplyr)

my_list <- list(year = 2018:2020, period = 1, id = c(17,35))

expand_grid(my_list) %>%
  pivot_wider(
    names_from = my_list,
    values_from = my_list
  ) %>%
  rename_at(., names(.), ~ names(my_list))
# A tibble: 1 x 3
  year         period       id          
  <named list> <named list> <named list>
1 <int [3]>    <dbl [1]>    <dbl [2]>   
expand_grid(my_list) %>%
  pivot_wider(
    names_from = my_list,
    values_from = my_list
  ) %>%
  rename_at(., names(.), ~ names(my_list)) %>%
  unnest(cols = names(my_list))
Erro: Incompatible lengths: 3, 2.

unnest 需要列名,字符串向量可以吗?

预期:

# A tibble: 1 x 3
  year  period   id          
  <int> <int>  <int>
1 2018   1    17
2 2019   1    17
3 2020   1    17
4 2018   1    35
5 2019   1    35
6 2020   1    35

【问题讨论】:

    标签: r tidyverse tidyr


    【解决方案1】:

    我们可以从purrr 使用cross_df

    purrr::cross_df(my_list)
    
    #   year period    id
    #  <int>  <dbl> <dbl>
    #1  2018      1    17
    #2  2019      1    17
    #3  2020      1    17
    #4  2018      1    35
    #5  2019      1    35
    #6  2020      1    35
    

    或者在基础 R 中使用 expand.griddo.call

    do.call(expand.grid, my_list)
    

    【讨论】:

      猜你喜欢
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-18
      • 2021-10-01
      相关资源
      最近更新 更多