latlio
latlio

Reputation: 1587

How to convert a list of tibbles/dataframes into a nested tibble/dataframe

Sample Data

ex_list <- list(a = tibble(x = 1:4, y = 5:8),
                b = mtcars)

How do I convert this list of tibbles/dataframes into a nested tibble as shown below:

# A tibble: 2 x 2
  data_name data            
  <chr>     <list>          
1 a         <tibble [4 × 2]>
2 b         <df [32 × 11]> 

Tidy solutions appreciated!

Upvotes: 1

Views: 685

Answers (2)

akrun
akrun

Reputation: 886948

We may use enframe

library(tibble)
enframe(ex_list)
# A tibble: 2 x 2
  name  value           
  <chr> <list>          
1 a     <tibble [4 × 2]>
2 b     <df [32 × 11]>  

If we need to change the column names, use the name and value

> enframe(ex_list, name = 'data_name', value = 'data')
# A tibble: 2 x 2
  data_name data            
  <chr>     <list>          
1 a         <tibble [4 × 2]>
2 b         <df [32 × 11]>  

Upvotes: 2

user63230
user63230

Reputation: 4636

Is this what you want?

library(tidyverse)
lapply(ex_list, nest) %>% 
  dplyr::bind_rows(., .id = "data_name")
# # A tibble: 2 x 2
#   data_name data              
#   <chr>     <list>            
# 1 a         <tibble [4 x 2]>  
# 2 b         <tibble [32 x 11]>

#OR map
#map(ex_list, nest) %>% 
#  bind_rows(., .id = "data_name")

Upvotes: 1

Related Questions