Ich möchte meinen Datenrahmen mit ein paar Spalten teilen und nennen wir fivenum
für jede Gruppe.
Der zurückgegebene Wert ist ein Datenrahmen mit nur zwei Spalten und der zweite ist eine Matrix. Wie kann ich es in normale Spalten eines dat.frame verwandeln?
Aktualisieren
Ich möchte etwas wie das Folgende mit weniger Code mit fivenum
Hier ist eine Lösung mit data.table
(obwohl nicht ausdrücklich angefordert, ist es ein offensichtliches Kompliment oder ein Ersatz für aggregate
oder ddply
. Der Aufruf von quantile
ist nicht nur ein wenig lang, sondern auch ineffizient , für jeden Anruf sortieren Sie die Daten
Oder verwenden Sie einen einzelnen Aufruf von quantile
mit dem entsprechenden Argument prob
.
Beachten Sie, dass die Namen der erstellten Spalten nicht syntaktisch gültig sind, obwohl Sie eine ähnliche Umbenennung mit setnames
BEARBEITEN
Interessanterweise wird quantile
die Namen des resultierenden Vektors setzen, wenn Sie names = TRUE
setzen, und dies wird kopieren (verlangsamen Sie die Zahlenverarbeitung und verbrauchen Speicher - es warnt Sie sogar in der Hilfe, Lust darauf!)
Daher sollten Sie wahrscheinlich
verwenden %Vor% Oder wenn Sie die benannte Liste ohne R
intern kopieren möchten
Soweit ich weiß, gibt es keinen genauen Weg, um das zu tun, was Sie fragen, weil die Funktion, die Sie verwenden (foznum), Daten nicht so zurückliefert, dass sie leicht an Spalten gebunden werden können innerhalb der "ddply" -Funktion. Dies ist jedoch auf programmatische Weise leicht zu bereinigen.
Schritt 1 : Führen Sie die fivenum
Funktion für jeden 'Species' Wert mit der 'ddply' Funktion aus.
Nun gibt die Funktion 'funnum' eine Liste zurück, so dass wir für jede Spezies 5 Einträge erhalten. Das ist der Teil, wo die Fünf-Mann-Funktion gegen uns kämpft.
Schritt 2 : Fügen Sie eine Beschriftungsspalte hinzu. Wir wissen, was die fünf Zahlen von Tukey sind, also rufen wir sie einfach in der Reihenfolge auf, in der die Fünf-Zahlen-Funktion sie zurückgibt. Die Liste wird wiederholt, bis sie das Ende der Daten erreicht.
%Vor%Schritt 3 : Wenn die Beschriftungen vorhanden sind, können wir diese Daten mithilfe der Funktion 'dcast' aus dem Paket 'reshape2' schnell in eine neue Form umwandeln.
%Vor%Der ganze Kram am Ende gibt nur die Spaltenreihenfolge an, da die'cast '-Funktion die Dinge automatisch in alphabetischer Reihenfolge abbildet.
Hoffe, das hilft.
Update : Ich habe mich entschieden, zurückzukehren, weil mir klar geworden ist, dass Ihnen noch eine weitere Option zur Verfügung steht. Sie können eine Matrix immer als Teil einer Datenrahmendefinition binden, sodass Sie Ihre Aggregatfunktion wie folgt auflösen können:
%Vor%