Rang variable Gruppe (dplyr)

Ich habe einen dataframe mit den Spalten x1, x2, group und ich möchte, um ein neues dataframe mit einer extra Spalte rank zeigt, dass die Reihenfolge der x1 in seiner Gruppe.

Es ist eine Frage im Zusammenhang mit hier, aber die akzeptierte Antwort scheint nicht mehr zu funktionieren.

Bis hier, es ist in Ordnung:

library(dplyr)
data(iris)
by_species <- iris %>% 
              arrange(Species, Sepal.Length) %>% 
              group_by(Species)  

Aber wenn ich versuche die Ränge von Gruppe:

by_species <- mutate(by_species, rank=row_number())

Der Fehler ist:

Fehler in der Reihe(x, Krawatten.method = "erste", na.last = "keep") :

argument "x" is missing, with no default

Update

War das problem einige Konflikte zwischen dplyr und plyr. Um den Fehler zu reproduzieren, laden Sie beide Pakete:

library(dplyr)
library(plyr)
data(iris)
by_species <- iris %>% 
              arrange(Species, Sepal.Length) %>% 
              group_by(Species) %>% 
              mutate(rank=row_number())
# Error in rank(x, ties.method = "first", na.last = "keep") : 
# argument "x" is missing, with no default

Entladen plyr es funktioniert wie es soll:

detach("package:plyr", unload=TRUE)
by_species <- iris %>% 
              arrange(Species, Sepal.Length) %>% 
              group_by(Species) %>% 
              mutate(rank=row_number())

by_species %>% filter(rank <= 3)

##   Sepal.Length Sepal.Width Petal.Length Petal.Width    Species  rank
##          (dbl)       (dbl)        (dbl)       (dbl)     (fctr) (int)
## 1          4.3         3.0          1.1         0.1     setosa     1
## 2          4.4         2.9          1.4         0.2     setosa     2
## 3          4.4         3.0          1.3         0.2     setosa     3
## 4          4.9         2.4          3.3         1.0 versicolor     1
## 5          5.0         2.0          3.5         1.0 versicolor     2
## 6          5.0         2.3          3.3         1.0 versicolor     3
## 7          4.9         2.5          4.5         1.7  virginica     1
## 8          5.6         2.8          4.9         2.0  virginica     2
## 9          5.7         2.5          5.0         2.0  virginica     3
  • Sind Sie sicher, dass der Befehl by_species <- mutate(by_species, rank=row_number()) ist die ein die den Fehler produziert ? Es funktioniert für mich, und deine Fehler bezieht sich auf die rank Funktion, nicht die row_number - Funktion, die verwendet wird. Auch, wenn Sie rank Sie brauchen ein argument wie in rank(x) (wo x ist das, was Sie ordnen wollen). row_number dies erforderlich ist.
  • hmm Nein, ich bin mir nicht sicher... :O
  • Es muss sich nicht beschweren, wenn ich rank: by_species <- mutate(by_species, myrank=rank(Sepal.Length))
  • Dein post nicht verwenden rank (der Teil, der Sie hervorgeht, die Probleme verursacht). Wenn rank für Sie arbeitet, dann bedeutet das, dass dieses problem gelöst ist, oder bin ich etwas fehlt ?
  • Ich glaube, ich könnte etwas fehlen zu :), Wenn ich rank statt row_number es nicht zu beschweren, aber es nicht tun, was ich will (Rang Spalte sollte wie 1,2,3... 1,2,3.... 1,2,3....)
  • siehe Bearbeiten (und danke für deine Geduld!)
  • Warum machst du das in zwei Teile? Können Sie, machen dies zu einem vollständigen Befehl, zu ordnen und Rang?
  • Ich denke, Sie sind nur nicht alle Ihre Stücke zusammen. by_species <- iris %>% arrange(Species, Sepal.Length) %>% group_by(Species) %>% mutate(rank = rank(Sepal.Length, ties.method = "first")) für mich funktioniert. Sie können dies testen, indem ausgeführt by_species %>% slice(1:3).
  • Dein Skript erzeugt die gewünschte Ausgabe da ist. Ich Stimme zu schließen, da nicht reproduzierbar.
  • siehe den edit. Deine Anweisungen funktionieren nicht für mich.
  • Ich habe es in zwei Teile, ohne Grund, nur zum Debuggen.
  • Cut/past die Antwort-code. Entsteht dadurch ein Fehler für Sie oder das, was Sie erwarten ?
  • Wenn der code in der Antwort nicht funktioniert, können Sie neu starten möchten R und laden Sie einfach dplyr (d.h. die minimale Anzahl von Paketen zu beheben). Dies sollte reduzieren die chance, Funktionen aus einem anderen Paket unerwartet.
  • getan. Kein Fehler, aber der Rang wird immer noch global und nicht durch die Gruppe... mein dplyr-version ist 0.4.3
  • Wenn Sie tun genau das, was in der Antwort, aber immer unterschiedliche Ergebnisse, scheint dies eher wie ein Problem mit Ihrer Umgebung (Plattform?). Wenn Sie Zugang zu einem anderen system, vielleicht können Sie versuchen, den code in die Antwort auch dort (d.h. der ist es gerade der Computer, den Sie verwenden). Ich habe versucht, eine version der Antwort, wo ich die package Namen in der call auf die Funktion hat es noch gut funktioniert für mich: by_species <- datasets::iris %>% dplyr::arrange(Species, Sepal.Length) %>% dplyr::group_by(Species) %>% dplyr::mutate(rank = base::rank(Sepal.Length, ties.method = "first"))
  • Ich habe etwas gesehen ähnlich wie beim laden plyr nach dplyr...
  • Bingo! Ich neu gestartet, R @steveb vorgeschlagen und es funktioniert. Ich werde Bearbeiten Sie die Frage mit den reproduzierbaren Fehler, für den Datensatz. Danke an alle!
  • Gut zu hören, dass es funktionierte. Habe Sie durch Zufall installieren oder aktualisieren Sie alle Pakete, die einfach vor einem Neustart ? Das kann oft (aber nicht immer) zu Problemen führen.
  • Zwischen dem Fehler und meinen neu starten, meinst du? Überhaupt nicht.
  • Ich stolperte zurück und dachte, möchten Sie vielleicht fügen Sie etwas zu Ihrer Sektion Bearbeiten. Es scheint, dass Sie nicht brauchen, um zu entladen plyr, können Sie laden Sie beide (plyr und dplyr), wenn Sie Last plyr ersten.
  • laden plyr und dann dplyr es scheint nicht zu funktionieren in meinem computer

InformationsquelleAutor alberto | 2016-01-23
Schreibe einen Kommentar