我有一个包含2列的数据框:' sales'和'月'。我想添加一个列,每个月对销售额进行排名。有谁知道最简洁的方式是什么?我想的是' tapply'但它给了我一个清单,我无法将其添加回数据框(轻松或简洁)。
Sales Month Rank
100 1 3
200 2 1
300 3 1
150 1 2
220 1 1
100 is third place amongst sales that belong to month 1 while 220 is first place for month 1.
答案 0 :(得分:3)
我们可以使用ave
中的base R
来创建列
df1$Rank <- with(df1, ave(-Sales, Month, FUN = rank))
df1$Rank
#[1] 3 1 1 2 1
或另一个简洁而有效的选项是data.table
。将'data.frame'转换为'data.table'(setDT(df1)
),按'月'分组,我们指定(:=
)'{1}}'销售'来创建'Rank “
rank
答案 1 :(得分:1)
您可以使用dplyr
库:
library(dplyr)
df = data.frame(sales=c(100, 200, 300, 150, 220), month=c(1,2,3,1,1))
df %>% group_by(month) %>% mutate(rank(desc(sales)))
虽然我认为该问题与this one
重复