Alle Listenelemente in einem Datenrahmen aufheben

8

Ich habe einen Datenrahmen mit den folgenden Variablenklassen für jede Spalte:

%Vor%

Die Daten in jeder Zeile sehen so aus:

%Vor%

Ich möchte es in eine Matrix oder einen Datenrahmen mit einem Wert pro Spalte transformieren, so dass das Ergebnis wie folgt aussehen sollte:

%Vor%

Ich habe versucht mit:

%Vor%

Aber es verwirrt die Reihenfolge der Zeilen in der Ausgabe.

Irgendeine Idee?

Zusätzliche Informationen:

Das obige Beispiel ist leicht vereinfacht und dput(head(input)) gibt das folgende Beispiel zurück:

%Vor%     
jatobat 10.04.2013, 16:02
quelle

1 Antwort

12

Das ist etwas chaotisch und wahrscheinlich ziemlich ineffizient, aber sollte Ihnen helfen, anzufangen:

Hier einige Beispieldaten:

%Vor%

Und eine kleine Funktion, die prüft, welche Spalten Listen sind, und für diese Spalten, rbind s sie zusammen und schließlich cbind s sie mit den Spalten, die nicht Listen sind .

%Vor%

Dies funktioniert nur, wenn jede "Spalten" -Liste Vektoren der gleichen Länge enthält (sonst funktioniert Base% rbind nicht).

Aktualisieren

Wenn ich diese Frage einen halben Tag später noch einmal durchführe, sehe ich einen anderen Nutzer ( @ user1981275 ) eine Lösung, die einfacher ist, aber dann löschte ihre Antwort. Vielleicht löschten sie, weil ihre Methode die Daten in Ganzzahlen umwandelte, da, wie DWin darauf hingewiesen hat, Elemente in Matrizen alle den gleichen Modus haben müssen.

Hier war ihre Lösung:

%Vor%

So kann es leicht geändert werden, um die gewünschte Ausgabe zu erhalten. Dies wird definitiv schneller sein als der frühere Ansatz:

%Vor%

Oder als Benutzerfunktion:

%Vor%

Update 2

Ich habe auch eine effizientere Funktion namens col_flatten geschrieben, die Teil meines "SOfun" -Pakets ist.

Installieren Sie das Paket mit:

%Vor%

Dann können Sie tun:

%Vor%

Es basiert auf der Funktion transpose in "data.table", also stellen Sie sicher, dass Sie auch "data.table" haben.

    
A5C1D2H2I1M1N2O1R2T1 10.04.2013, 17:03
quelle

Tags und Links