Konvertieren der verschachtelten Liste in den Dataframe

8

Das Ziel besteht darin, eine verschachtelte Liste, die manchmal fehlende Datensätze enthält, in einen Datenrahmen umzuwandeln. Ein Beispiel für die Struktur bei fehlenden Datensätzen ist:

%Vor%

Wenn keine Datensätze fehlen, kann die Liste mit data.frame(do.call(rbind.data.frame, mylist)) in einen Datenrahmen konvertiert werden. Wenn Datensätze fehlen, führt dies jedoch zu einer Spaltenübereinstimmung. Ich weiß, dass es Funktionen gibt, um Datenrahmen von nicht übereinstimmenden Spalten zusammenzuführen, aber ich muss noch einen finden, der auf Listen angewendet werden kann. Das ideale Ergebnis würde 2 mit NA für alle Variablen aufzeichnen. Hoffe auf etwas Hilfe.

Bearbeiten, um dput(mylist) hinzuzufügen:

%Vor%     
Jay 03.10.2014, 10:46
quelle

3 Antworten

17

Sie können auch rbindlist (mindestens v1.9.3) im Paket data.table verwenden:

%Vor%     
hrbrmstr 03.10.2014, 11:19
quelle
7

Sie könnten eine Liste von data.frames erstellen:

%Vor%

Dann verwenden Sie eine der folgenden:

%Vor%

oder je schneller

%Vor%

Im Fall von dplyr::rbind_all bin ich überrascht, dass es "" anstelle von NA für fehlende Daten verwendet. Wenn Sie stringsAsFactors = FALSE entfernen, erhalten Sie NA , aber auf Kosten einer Warnung ... Also wäre suppressWarnings(rbind_all(lapply(mylist, data.frame))) eine hässliche aber schnelle Lösung.

    
flodel 03.10.2014 10:59
quelle
5

Ich habe gerade eine Lösung für diese Frage , die hier anwendbar ist, also werde ich es auch hier zur Verfügung stellen:

%Vor%

Ausführung:

%Vor%

Meine Funktion ist mächtiger als data.table::rbindlist() ab 1.9.6, da sie eine beliebige Anzahl von Verschachtelungsebenen und unterschiedliche Vektorlängen über Zweige hinweg verarbeiten kann. In der verknüpften Frage flacht meine Funktion die Liste des OPs korrekt zu einem data.frame ab, aber data.table::rbindlist() schlägt mit "Error in rbindlist(jsonRList, fill = T) : Column 4 of item 16 is length 2, inconsistent with first column of that item which is length 1. rbind/rbindlist doesn't recycle as it already expects each item to be a uniform list, data.frame or data.table" fehl.

    
bgoldst 21.02.2016 01:41
quelle

Tags und Links