Search code examples
rlistdata.tableradix

flatten a named list in R - converting the name into first column


Say, I have a named list:

library(dplyr)
myData <- mtcars %>%
  group_by(cyl) %>%
  group_map(~ head(.x, 1L))
names(myData) <- c("Mazda", "Honda", "Suzuki")

Now, I want to convert the list into a table looking like this:

name  mpg disp  hp drat   wt  qsec vs am gear carb
1:  Mazda 22.8  108  93 3.85 2.32 18.61  1  1    4    1
2:  Honda 21.0  160 110 3.90 2.62 16.46  0  1    4    4
3: Suzuki 18.7  360 175 3.15 3.44 17.02  0  0    3    2

I tried:

data.frame(Reduce(rbind, myData))
do.call(rbind.data.frame, myData)

but the both result in a data.table without the names. How can I convert the list into a data.table with the column names?


Solution

  • library(data.table)
    rbindlist(myData, idcol = "name")
    #      name  mpg disp  hp drat   wt  qsec vs am gear carb
    # 1:  Mazda 22.8  108  93 3.85 2.32 18.61  1  1    4    1
    # 2:  Honda 21.0  160 110 3.90 2.62 16.46  0  1    4    4
    # 3: Suzuki 18.7  360 175 3.15 3.44 17.02  0  0    3    2
    

    Or in base R:

    data.frame(name = names(myData), do.call(rbind, myData))