У меня есть кадр данных со столбцами x1, x2, group
, и я хотел бы создать новый кадр данных с дополнительным столбцом rank
, который указывает порядок x1
в его группе.
Здесь есть связанный вопрос here, но принятый ответ, похоже, больше не работает.
Пока здесь, это хорошо:
library(dplyr)
data(iris)
by_species <- iris %>%
arrange(Species, Sepal.Length) %>%
group_by(Species)
Но когда я пытаюсь получить звания по группе:
by_species <- mutate(by_species, rank=row_number())
Ошибка:
Error in rank(x, ties.method = "first", na.last = "keep") :
argument "x" is missing, with no default
Обновление
Проблема заключалась в некотором конфликте между dplyr
и plyr
. Чтобы воспроизвести ошибку, загрузите оба пакета:
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
Разгрузка plyr
работает как надо:
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