converting list to data frame in R not losing root node

Viewed 35

Have a list to convert to data frame but I'm losing the root node column:

my_list <- list(usdol = list(name = "Dollar", native = "US dollar"), dmk = list(name = "Mark", 
    native = "Deutsch Mark"))


> my_list
$usdol
$usdol$name
[1] "Dollar"

$usdol$native
[1] "US dollar"


$dmk
$dmk$name
[1] "Mark"

$dmk$native
[1] "Deutsch Mark"

Converting to data frame this way using qdapTools (list2df)

 my_list %>% list2df()

Dollar          usdol           
US dollar       usdol           
Mark             dmk            
Deutsch Mark    dmk

Desired outcome is:

code  name  secondary_name

usdol Dollar US dollar
dmk    Mark  Deutsch Mark
1 Answers

Here is one option with unnest_wider from tidyr

library(tibble)
library(tidyr)
tibble(col = my_list) %>%
      unnest_wider(col) %>%
      mutate(code = names(my_list))%>% 
      select(code, name, secondary_name = native)
# A tibble: 2 x 3
#  code  name   secondary_name
#   <chr> <chr>  <chr>         
#1 usdol Dollar US dollar     
#2 dmk   Mark   Deutsch Mark  

Or using base R

do.call(rbind, Map(cbind, lapply(my_list, stack), code = names(my_list)))
Related