我有一个数据框,其中包含不同年份的不同项目的数量:
df <- data.frame(item = rep(c('a','b','c'), 3),
year = rep(c('2010','2011','2012'), each=3),
count = c(1,4,6,3,8,3,5,7,9))
Run Code Online (Sandbox Code Playgroud)
我想添加一个"year.rank"列,它给出一个项目在给定年份内的排名,其中较高的计数会导致更高的"排名".有了上面的内容,它看起来像:
item year count year.rank
1 a 2010 1 3
2 b 2010 4 2
3 c 2010 6 1
4 a 2011 3 2
5 b 2011 8 1
6 c 2011 3 3
7 a 2012 5 3
8 b 2012 7 2
9 c 2012 9 1
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用整个数据框执行此操作order(df$count),但我不确定如何按年完成.
我有一个带有列的数据框,x1, x2, group我想生成一个新的数据框,其中有一个额外的列rank,表示x1其组中的顺序.
还有一个相关的问题在这里,但接受的答案似乎不工作了.
直到这里,没关系:
library(dplyr)
data(iris)
by_species <- iris %>%
arrange(Species, Sepal.Length) %>%
group_by(Species)
Run Code Online (Sandbox Code Playgroud)
但是当我试图按组排名时:
by_species <- mutate(by_species, rank=row_number())
Run Code Online (Sandbox Code Playgroud)
错误是:
排名错误(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
Run Code Online (Sandbox Code Playgroud)
卸载plyr它的工作原理:
detach("package:plyr", unload=TRUE)
by_species <- iris %>% …Run Code Online (Sandbox Code Playgroud)