Ich habe einen ziemlich großen Datenrahmen, der wie folgt strukturiert ist:
%Vor%Ich muss einen Datenrahmen wie folgt erstellen:
%Vor%Ich bin mir ziemlich sicher, dass ich es mit dem Umgestaltungspaket machen muss, aber ich kann nicht bekommen, was ich will.
Könnten Sie mir helfen?
Danke
Hier ist die reshape()
Lösung.
Das Schlüssel-Bit ist, dass das Argument varying=
eine Liste von Vektoren mit Spaltennamen im Wide-Format annehmen kann, die einzelnen Variablen im langen Format entsprechen. In diesem Fall werden die Spalten "x1", "x2", "x3"
im ursprünglichen Datenframe an eine Spalte im langen Datenframe gesendet, die Spalten "y1, y2, y3"
in eine zweite Spalte und so weiter.
Schließlich sind ein paar rein kosmetische Schritte erforderlich, damit die Ergebnisse exakt aussehen, wie in Ihrer Frage gezeigt:
%Vor% Hier ist ein Ansatz, der reshape2
verwendet und in meinem Artikel zu sauberen Daten .
Schritt 1: Identifizieren Sie die Variablen, die sich bereits in Spalten befinden. In diesem Fall: id und v. Dies sind die Variablen, die wir durch
schmelzen %Vor%Schritt 2: Aufteilen von Variablen, die derzeit in einer Spalte zusammengefasst sind. In diesem Fall ist das die Quelle (der Zeichenteil) und rep (der ganzzahlige Teil):
Es gibt viele Möglichkeiten, dies zu tun, ich werde String-Extraktion mit dem stringr
-Paket
Schritt 3: Ordne die Variablen, die momentan in den Zeilen sind, aber wir wollen in Spalten auf:
%Vor% Jemand bitte beweisen Sie mir falsch, aber ich denke nicht, dass es einfach ist, dieses Problem zu lösen, indem Sie entweder das Paket reshape
oder die Funktion reshape
verwenden.
Es ist jedoch einfach genug mit lapply
und do.call
:
Replizieren Sie die Daten:
%Vor%Machen Sie die Analyse
%Vor%Versuchen Sie, das reshapeGUI-Paket zu verwenden. Es nutzt das plyr-Paket und das reshape2-Paket und bietet Ihnen eine benutzerfreundliche Oberfläche, mit der Sie Ihre Umformung in der Vorschau anzeigen können, bevor Sie sie ausführen. Es gibt Ihnen auch den Code für die Umformung, die Sie gerade machen, damit Sie es in Ihr Skript einfügen können, um die Reproduzierbarkeit zu verbessern. So können Sie lernen, wie Sie die Befehle schmelzen und umformen in reshape2 anwenden können. Es ist eine nette Krücke für komplexe Datenmanipulationen wie diese für diejenigen, die Ninjas nicht umformen.
Hier sind zwei neuere Ansätze, die für jemanden von Interesse sein könnten, der diese Frage liest:
Option 1: Der Ordnungssinn
%Vor%Option 2: data.table
%Vor%