Ho un elenco complesso costituito da altri elenchi e frame di dati. Ho bisogno di semplificare questa lista per consistere solo di frame di dati - quindi ogni lista di secondo livello dovrebbe essere fatta in frame di primo livello separati.Conversione di un elenco complesso di elenchi in un elenco di frame di dati
Ecco esempio riproducibile:
dd<-data.frame(x=1:3,y=4:6)
l1<-list(dd,list(dd,dd))
#original list
l1
[[1]]
x y
1 1 4
2 2 5
3 3 6
[[2]]
[[2]][[1]]
x y
1 1 4
2 2 5
3 3 6
[[2]][[2]]
x y
1 1 4
2 2 5
3 3 6
Risultato devo ottenere
l2<-list(dd,dd,dd)
l2
[[1]]
x y
1 1 4
2 2 5
3 3 6
[[2]]
x y
1 1 4
2 2 5
3 3 6
[[3]]
x y
1 1 4
2 2 5
3 3 6
ho provato con la funzione unlist()
e l'argomento recursive=FALSE
ma in questo caso primo frame di dati livello viene convertito in due vettori .
unlist(l1,recursive=FALSE)
$x
[1] 1 2 3
$y
[1] 4 5 6
[[3]]
x y
1 1 4
2 2 5
3 3 6
[[4]]
x y
1 1 4
2 2 5
3 3 6
Grazie! Stavo pensando tutto il tempo in direzione opposta - come dividere l'elenco delle liste. L'idea di convertire il frame di dati in un elenco di frame di dati è ottima. –
Vorrei provare ad evitare 'class (x) ==" data.frame "' e usare invece 'is.data.frame'. – shadow
non so quale sia il problema qui per evitare di usarlo. potresti elaborare? 'is.data.frame' usa' inherits' internamente e darebbe VERO per oggetti derivati da 'data.frame'. Ad esempio anche su 'data.table'. Se ciò è auspicabile, allora sì, usare 'inherits' è meglio. – Arun