Jeff Henderson
Jeff Henderson

Reputation: 689

Convert Nested list into single data frame or tibble

I have a very large nested list that I'd like to make to a flat data frame. I created a dput of the first two elements of the list to quickly copy/paste (sorry it's got a lot of nonesense I can clean after creating the df) I tried following similar SO questions about converting lists to df but none seem to be compatible with mine for some reason.

Thank you!

Here is the dput of the first two elements - the full list has thousands:

list(structure(list(first = structure(list(text = c("\n\tMenghe a'Nyam\n\t\n\n  \n\n  \n\n  \n\n  \n          
Position:\n  \n  Forward\n\n\n\n  6-5, 215lb (196cm, 97kg) \n  \n\n  \n\n  \n  \n  \n\n  School:     
Canisius\n\n\n\n\n\n  More player info\n\n\n\n\n\n"  , 
"\n\tMenghe a'Nyam\n\t\n\n  \n\n  \n\n  \n\n  \n  Position:\n  \n  Forward\n\n\n\n  6-5, 215lb 
(196cm, 97kg) \n  \n\n  \n\n  \n  \n  \n\n  School: Canisius\n\n\n\n\n\n  More player 
info\n\n\n\n\n\n"  , 
"\n\tMenghe a'Nyam\n\t\n\n  \n\n  \n\n  \n\n  \n  Position:\n  \n  Forward\n\n\n\n  6-5, 215lb 
(196cm, 97kg) \n  \n\n  \n\n  \n  \n  \n\n  School: Canisius\n\n\n\n\n\n  More player 
info\n\n\n\n\n\n"  
)), row.names = c(NA, -3L), class = c("tbl_df", "tbl", "data.frame"
)), second = structure(list(Season = c("2006-07", "2007-08", 
"Career"), name = c("menghe-anyam", "menghe-anyam", "menghe-anyam"
)), row.names = c(NA, -3L), class = "data.frame")), row.names = c(NA, 
-3L), class = c("tbl_df", "tbl", "data.frame")), structure(list(
first = structure(list(text = c("\n\tJordan Aaberg\n\t\n\n  \n\n  \n\n  \n\n  \n  Position:\n  \n  
Forward\n\n\n\n  6-9, 225lb (206cm, 102kg) \n  \n\n  Hometown: Rothsay, MN\n\n\n\n  \n\n  High 
School: Rothsay\n\n\n\n  \n  \n  \n\n  School: North Dakota State\n\n\n\n\n\n  More player 
info\n\n\n\n\n\n"  , 
"\n\tJordan Aaberg\n\t\n\n  \n\n  \n\n  \n\n  \n  Position:\n  \n  Forward\n\n\n\n  6-9, 225lb 
(206cm, 102kg) \n  \n\n  Hometown: Rothsay, MN\n\n\n\n  \n\n  High School: Rothsay\n\n\n\n  \n  \n  
\n\n  School: North Dakota State\n\n\n\n\n\n  More player info\n\n\n\n\n\n"  , 
"\n\tJordan Aaberg\n\t\n\n  \n\n  \n\n  \n\n  \n  Position:\n  \n  Forward\n\n\n\n  6-9, 225lb 
(206cm, 102kg) \n  \n\n  Hometown: Rothsay, MN\n\n\n\n  \n\n  High School: Rothsay\n\n\n\n  \n  \n  
\n\n  School: North Dakota State\n\n\n\n\n\n  More player info\n\n\n\n\n\n"  , 
"\n\tJordan Aaberg\n\t\n\n  \n\n  \n\n  \n\n  \n  Position:\n  \n  Forward\n\n\n\n  6-9, 225lb 
(206cm, 102kg) \n  \n\n  Hometown: Rothsay, MN\n\n\n\n  \n\n  High School: Rothsay\n\n\n\n  \n  \n  
\n\n  School: North Dakota State\n\n\n\n\n\n  More player info\n\n\n\n\n\n"  , 
"\n\tJordan Aaberg\n\t\n\n  \n\n  \n\n  \n\n  \n  Position:\n  \n  Forward\n\n\n\n  6-9, 225lb 
(206cm, 102kg) \n  \n\n  Hometown: Rothsay, MN\n\n\n\n  \n\n  High School: Rothsay\n\n\n\n  \n  \n  
\n\n  School: North Dakota State\n\n\n\n\n\n  More player info\n\n\n\n\n\n"  
)), row.names = c(NA, -5L), class = c("tbl_df", "tbl", "data.frame"
)), second = structure(list(Season = c("2009-10", "2011-12", 
"2012-13", "2013-14", "Career"), name = c("jordan-aaberg", 
"jordan-aaberg", "jordan-aaberg", "jordan-aaberg", "jordan-aaberg"
)), row.names = c(NA, -5L), class = "data.frame")), row.names = c(NA, 
-5L), class = c("tbl_df", "tbl", "data.frame")))

Upvotes: 1

Views: 224

Answers (2)

akrun
akrun

Reputation: 887951

We can just do bind_rows

library(dplyr)
data %>% bind_rows

Upvotes: 0

Ronak Shah
Ronak Shah

Reputation: 389325

To get the data in one dataframe you can use :

newdata <- do.call(rbind, lapply(data, function(x) do.call(cbind, x)))

Or using purrr :

newdata <- purrr::map_df(data, ~do.call(cbind, .x))

Upvotes: 1

Related Questions