Wie kann dplyr generieren von Daten-Frames für jede Gruppe nach der group_by-Betrieb?
War ich sehr schockiert von der Glätte des dplyr-package im flow-style-Daten-Verarbeitung. Vor kurzem habe ich in Eile ein problem erzeugen Sie einen neuen data frame für jede Gruppen-ID und kombinieren Sie diese kleinen Daten-frames zu einer letzten größeren Daten-frame. Ein Spielzeug Beispiel:
input.data.frame %>%
group_by(gid) %>%
{some operation to generate a new data frame for each group} ## FAILED!!!!
In dplyr, die Funktion mutate
hinzufügen der neuen Spalte für jede Gruppe und summarise
Generierung von Zusammenfassungen für jede Gruppe, die beide erfüllt nicht meine Anforderung. (Habe ich etwas übersehen?)
Alternativ mit ddply
von plyr package, die bisherigen interation von dplyr, kann ich es über
ddply(input.data.frame, .(gid), function(x) {
some operation to generate a new data frame for each group
}
Aber der Mangel ist einige funcs in dplyr maskiert, von Nutzbarkeit, wenn ich lade das plyr package.
- Verwenden Sie die
do
Betreiber in einem solchen Fall. Allerdings wäre es besser, wenn Sie zeigte uns, was Sie wirklich wollen, zu tun / am Ende erreichen. Aus der Hilfe: "können Sie tun, um ausführen beliebigen Berechnung, Rückkehr entweder einen Daten-frame oder beliebige Objekte werden in einer Liste gespeichert." - Schöne Einleitung "ich war sehr schockiert, von der Glätte des dplyr-package im flow-style-Daten verarbeitet." 🙂
- Und übrigens, wenn Sie das laden beider Pakete (plyr und dplyr) die Empfehlung zu laden plyr ersten und dann dplyr, so der "standard" - Paket für z.B. "zusammenfassen" wäre dplyr, aber wenn Sie es brauchen, von plyr, verwenden Sie einfach
plyr::summarise
um das Paket explizit. do
, das ist das, was ich Suche!! Eine wirklich Allgemeine Bedienung. Dank Kerl. 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Drehen mein Kommentar in eine Antwort..
Ja, dplyr bietet eine Möglichkeit zum erstellen von Daten.frames für jede Gruppe. Mit der
do
Betreiber auf eine gruppierte Daten.Rahmen /tbl-lassen Sie dies tun, genauer gesagt, er lässt Sie gelten beliebige Funktionen zu jeder Gruppe. Dies ist dokumentiert in der Hilfe-Datei fürdo
:Meine Erfahrung bisher ist, dass, Wann immer es möglich ist, verwenden Sie eine der spezialisierten dplyr-Funktionen wie mutieren /zusammenfassen /mutate_each /etc. Sie sollten bevorzugt über
do
, denn Sie sind oft effizienter als die Verwendung vondo
, aber natürlich nicht so flexibel.?do
. Oder geben Sie einen minimal-Beispiel für dein problem, aber dann wäre es besser, wenn Sie eine neue Frage stellendata.frame
sdata.table
stbl_df
s etc, nicht für die Listen. Der Punkt ist, dass wegen der Gruppierung der Funktionen in dplyr, normalerweise ist es nicht notwendig, eine explizitesplit
als es notwendig werden könnte, wenn Sie nur die Basis-R.Hier ist ein Beispiel nach der Antwort von G. Grothendieck zu einer ähnlichen Frage. Hinzufügen von Zeilen in `dplyr` Ausgabe
Zuerst erstellen wir ein data-frame mit den x und g. Es sind 9 zufällige zahlen in x-und 3 Gruppen a,b,c in g. Wir möchten, wählen Sie die 2 größte Zahl aus jeder Gruppe. Es ist wichtig zu erinnern, dass zu tun, erfordert einen Daten-frame als Rückgabewert.