R-Daten mit Benutzereinträgen in Zeilen umformatieren, die für jeden Benutzer kollabiert werden

7

Verzeihen Sie meine Neuheit für die R-Welt, danke im Voraus für Ihre Hilfe.

Ich möchte die Daten eines Experiments analysieren.

Die Daten werden im Long-Format angezeigt und müssen in "Wide" umgewandelt werden, aber ich kann nicht genau herausfinden, wie das geht. Die meisten Beispiele für Schmelze / Besetzung und Umformung behandeln viel einfachere Datenrahmen.

Jedes Mal, wenn das Subjekt eine Frage zu dem Experiment beantwortet, werden seine Benutzer-ID, Ort, Alter und Geschlecht in einer einzigen Zeile aufgezeichnet, dann werden seine experimentellen Daten zu einer Reihe von Fragen neben diesen Variablen eingegeben. Hier ist die Sache, sie können eine beliebige Anzahl von Fragen zu dem Experiment beantworten, und sie können verschiedene Dinge beantworten (es ist ziemlich kompliziert, aber es muss so sein).

Die Rohdaten sehen ungefähr so ​​aus:

%Vor%

Ich möchte diese Daten so umformen, dass sich jeder Benutzer in einer einzelnen Zeile befindet, um so zu aussehen:

%Vor%

Ich denke, das ist nur eine Frage des Findens der richtigen Umformungsgleichung, aber ich bin seit ein paar Stunden dabei und ich kann nicht ganz bekommen, wie ich will, dass es auch aussieht, da die meisten Beispiele das tun die wiederholten demografischen Daten nicht haben und somit einfach einfacher rotiert werden können. Sehr leid, wenn ich etwas Einfaches übersehen habe.

    
GFoMoFo 17.08.2015, 22:57
quelle

3 Antworten

11

Mit data.table können Sie tun:

%Vor%     
MichaelChirico 17.08.2015 23:08
quelle
10

Es gibt ein Paket namens tidyr , das das Schmelzen und Umformen von Datenrahmen erheblich erleichtert. In Ihrem Fall können Sie tidyr::spread direkt verwenden:

%Vor%

Dies füllt jedoch fehlende Einträge mit NA :

%Vor%

Sie können das beheben, indem Sie sie ersetzen:

%Vor%

... oder mit dem Argument fill :

%Vor%

Aus Gründen der Vollständigkeit funktioniert das Umgekehrte (d. h. das Reproduzieren des ursprünglichen data.frame ) über gather (dies wird üblicherweise als "Schmelzen" bezeichnet):

%Vor%

- Das letzte Argument hier sagt gather , welche Spalten zu sammeln sind (und es unterstützt die prägnante Bereichssyntax).

    
Konrad Rudolph 17.08.2015 23:07
quelle
10

Hier ist die immer elegante stats::reshape version

%Vor%

Fehlende Werte werden mit NA in reshape() gefüllt, und die Namen sind nicht das, was wir wollen. Also müssen wir etwas mehr arbeiten. Hier können wir die Namen ändern und das NA s durch Null in derselben Zeile ersetzen, um zu Ihrem gewünschten Ergebnis zu kommen.

%Vor%

Natürlich wäre der Code definitiv lesbarer, wenn wir das in zwei separate Zeilen aufteilen würden. Beachten Sie auch, dass in Ihren Originaldaten kein F in Item vorhanden ist, daher der Unterschied in der Ausgabe von Ihrem.

Daten:

%Vor%     
Rich Scriven 17.08.2015 23:09
quelle

Tags und Links