添加tapply到列

时间:2016-09-15 15:07:11

标签: r tapply

我有一个包含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. 

2 个答案:

答案 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

重复