【发布时间】:2016-02-06 04:15:17
【问题描述】:
样本数据:
df1 <- data.frame(id=c("A","A","A","A","B","B","B","B"),
year=c(2014,2014,2015,2015),
month=c(1,2),
new.employee=c(4,6,2,6,23,2,5,34))
id year month new.employee
1 A 2014 1 4
2 A 2014 2 6
3 A 2015 1 2
4 A 2015 2 6
5 B 2014 1 23
6 B 2014 2 2
7 B 2015 1 5
8 B 2015 2 34
期望的结果:
desired_df <- data.frame(id=c("A","A","A","A","B","B","B","B"),
year=c(2014,2014,2015,2015),
month=c(1,2),
new.employee=c(4,6,2,6,23,2,5,34),
new.employee.rank=c(1,1,2,2,2,2,1,1))
id year month new.employee new.employee.rank
1 A 2014 1 4 1
2 A 2014 2 6 1
3 A 2015 1 2 2
4 A 2015 2 6 2
5 B 2014 1 23 2
6 B 2014 2 2 2
7 B 2015 1 5 1
8 B 2015 2 34 1
排名规则是:我选择每年的第2个月对A和B之间的新员工数量进行排名。然后我需要将这些排名赋予第1个月。即每年的第1个月排名必须等于月份同年排名第2。
我尝试了这些代码来获得每个月和每年的排名,
library(data.table)
df1 <- data.table(df1)
df1[,rank:=rank(new.employee), by=c("year","month")]
如果(任何人都可以在列中滚动排名值以将月份 1 的排名替换为月份 2 的排名),这可能是一个解决方案。
【问题讨论】:
标签: r data.table conditional-statements rank