Rang variable par groupe (dplyr)

J'ai un dataframe avec des colonnes x1, x2, group et je voudrais générer un nouveau dataframe, avec une colonne supplémentaire rank qui indique l'ordre de x1 dans son groupe.

Il y a une question relative à la ici, mais l'on a accepté la réponse ne semble pas fonctionner.

Jusqu'ici, c'est la fin:

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

Mais quand j'essaie d'obtenir le classement en groupe:

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

L'erreur est:

Erreur dans le rang(x, liens.method = "premier", na.dernière = "garder") :
l'argument "x" est manquant, sans valeur par défaut

Mise à jour

Le problème a été en conflit entre dplyr et plyr. Pour reproduire l'erreur de chargement de colis:

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

Déchargement plyr il fonctionne comme il se doit:

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
Êtes-vous sûr que la commande by_species <- mutate(by_species, rank=row_number()) est une production de l'erreur ? Il fonctionne pour moi, et que ton erreur se réfère à la rank fonction, pas la row_number fonction qui est utilisée. Aussi, si vous ne l'utilisez rank, vous devez fournir un argument comme dans rank(x) (où x est ce que vous voulez rang). row_number ne l'exige pas.
hmm non, je ne suis pas sûr... :O
Il ne se plaint pas lorsque j'utilise rank: by_species <- mutate(by_species, myrank=rank(Sepal.Length))
Votre post ne pas utiliser rank (la partie que vous affirmez est à l'origine des problèmes). Si rank est de travailler pour vous, alors est-ce à dire que ce problème est résolu ou ai-je raté quelque chose ?
Je pense que j'ai peut-être raté quelque chose aussi 🙂 Si j'utilise rank au lieu de row_number il ne se plaint pas, mais il ne veut pas faire ce que je veux (rang colonne devrait être comme 1,2,3... 1,2,3.... 1,2,3....)

OriginalL'auteur alberto | 2016-01-23