【发布时间】:2016-04-30 07:12:57
【问题描述】:
我有一个包含 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())
错误是:
排名错误(x, ties.method = "first", na.last = "keep") :
缺少参数“x”,没有默认值
更新
问题是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
【问题讨论】:
-
你确定命令
by_species <- mutate(by_species, rank=row_number())是产生错误的那个吗?它对我有用,您的错误指的是rank函数,而不是正在使用的row_number函数。此外,如果您使用rank,则需要提供rank(x)中的参数(其中x是您想要排名的)。row_number不需要这个。 -
嗯不,我不确定... :O
-
我使用
rank时不会报错:by_species <- mutate(by_species, myrank=rank(Sepal.Length)) -
@steveb loading
plyr然后dplyr它似乎在我的电脑上不起作用 -
我还发现我的需要使用
detach("package:plyr", unload=TRUE)才能正常运行。