相关疑难解决方法(0)

将"rank"列添加到数据框

我有一个数据框,其中包含不同年份的不同项目的数量:

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),但我不确定如何按年完成.

r

33
推荐指数
4
解决办法
5万
查看次数

按组排序变量(dplyr)

我有一个带有列的数据框,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)

r dplyr

18
推荐指数
1
解决办法
2万
查看次数

标签 统计

r ×2

dplyr ×1