Ho una lista di elenchi con nome della seguente modulo da un oggetto JSON:lista di liste con nome per data.frame
my_list = list(list(a = 10, b = "blah"),
list(a = 15, b = "stuff"))
Ogni elemento della lista esterna è una lista di nome e voglio convertirlo ad una data.frame del seguente modulo con i nomi delle colonne intatte:
a b
10 "blah"
15 "stuff"
in superficie, posso realizzare questo facendo to_df = data.frame(do.call(rbind, my_list))
.
Tuttavia, se dovessi cercare di estrarre una singola colonna utilizzando to_df$a
o to_df[,1]
vorrei avere un elenco invece di un vettore come normalmente ci si aspetta da un data.frame:
> to_df[,1]
[[1]]
[1] 10
[[2]]
[1] 15
Invece di:
> to_df[,1]
[1] 10 15
Un vecchio post sulla mailing list di R ha suggerito la seguente soluzione: to_df = as.data.frame(t(sapply(my_list, rbind)))
. Ma non solo non trasferisce i nomi delle colonne, ma ha lo stesso problema di restituire una lista invece di un vettore quando si guardano le singole colonne usando to_df[,1]
.
Qual è il modo migliore per raggiungere questo obiettivo? Esiste un modo dplyr
?
EDIT: Grazie per tutte le soluzioni, sembra che il trucco è quello di lapply
e trasformare ogni elemento della lista per un data.frame
e poi legarli insieme utilizzando dplyr o do.call
. In alternativa, data.table
esegue la maggior parte del lavoro con una singola chiamata a rbindlist
.
Si potrebbe provare 'lapply (my_list, data.frame)%>% bind_rows()' –
Sono disponibili diverse soluzioni praticabili sotto. Ma dovresti notare che 'to_df = data.frame (do.call (rbind, my_list))' non sembra darti un 'data.frame'. Sembra darti un 'elenco' basato sull'output che mostri. –