Variablen zu einer Liste zusammenfügen

7

Leute,

Ich bin mit der folgenden Herausforderung ratlos. Ich habe einen Datensatz, der so aussieht:

%Vor%

Was ich tun möchte, ist, die Daten zu vereinfachen (wenn möglich) und die Variablen "Fruit" und "Amount" zu reduzieren

%Vor%

Ich habe versucht, mit c () und rbind (), aber sie produzieren nicht die Ergebnisse, die ich will - ich habe den Tipp hier ausprobiert: data.frame-Zeilen zu einer Liste , aber ich bin mir nicht sicher, ob dies der beste Weg ist, meine Daten zu vereinfachen.

Dies ist so, dass es vermutlich einfacher für mich wäre, mit weniger Variablen zu handeln, um beispielsweise das Auftreten bestimmter Artikel zu zählen (z. B. kaufen 60% Käufer Banana).

Ich hoffe, das ist machbar - bin auch offen für irgendwelche Vorschläge. Irgendwelche Lösungen geschätzt!

Danke.

    
jacatra 06.03.2013, 02:40
quelle

5 Antworten

11

Versuch, Ihre Daten zu replizieren und data.table

zu verwenden %Vor%

@RicardoSaporta edit:

Sie können den Umformungsschritt überspringen, wenn Sie möchten, indem Sie list(list(c(....)))
verwenden Dies wird wahrscheinlich ein wenig Ausführungszeit sparen (der Nachteil ist, dass NA s nicht Leerzeichen hinzugefügt werden). Wie @Marius jedoch betont, ist DTlong oben wahrscheinlich leichter zu handhaben.

%Vor%     
mnel 06.03.2013 02:54
quelle
6

Hier eine Lösung mit Basispaket. Es ist wie Tyler Lösung, aber mit einer einzigen Anwendung.

%Vor%

Ich würde auch die Indexnummer durch ein grep ändern, etwa so

%Vor%

BEARBEITEN fügen Sie etwas Benchmarking hinzu.

%Vor%

Für einen kleinen data.frame ist Tyler Rinker der Gewinner !! Wie ich das erkläre (nur raten)

  1. data: table solution leidet unter der Verwendung von reshape und generell ist data.table schneller für große Daten.
  2. Ag-Studie Lösung ist langsamer wegen der Teilmenge für jede Zeile, nicht wie Tyler Lösung, die Teilmenge vor der Anwendung anwenden.
  3. Lösung ist langsam wegen der Verwendung von Umformen und Zusammenführen ..
agstudy 06.03.2013 03:39
quelle
5

Das ist eine wirklich schlechte Idee, aber hier ist es in der Basis data.frame . Es funktioniert, weil data.frame eigentlich eine Liste von Vektoren gleicher Länge ist. Sie können data.frame zum Speichern von Vektoren in Zellen erzwingen, aber es braucht etwas Hackerei. Ich würde andere Formate vorschlagen, einschließlich Marius Vorschlag oder eine Liste.

%Vor%

Nachgeben:

%Vor%     
Tyler Rinker 06.03.2013 03:05
quelle
4

Hinzufügen zu den bereits vorhandenen großen Antworten, hier ist eine andere (Bleiben Sie auf Basis R):

%Vor%

Das Grundkonzept lautet:

  1. Verwenden Sie reshape , um Ihre Daten in langer Form zu erhalten (wo Sie eigentlich aufhören sollten)
  2. Verwenden Sie zwei verschiedene aggregate -Befehle, einen, um Ihre Fruchtspalten zu aggregieren, und einen, um Ihre Betragspalten zu aggregieren. Der Formelansatz von aggregate kümmert sich darum, NA zu entfernen, aber Sie können Ihr gewünschtes Verhalten mit dem Argument na.action angeben.
  3. Verwenden Sie merge , um die beiden zu kombinieren.
A5C1D2H2I1M1N2O1R2T1 06.03.2013 05:36
quelle
0

Es war nicht vorhanden, als die Frage gestellt wurde, aber tidyr funktioniert dafür gut.

Wiederverwendung von Daten aus @ mnels Antwort,

%Vor%     
jaimedash 13.04.2016 17:39
quelle

Tags und Links