gpt4 book ai didi

r - 根据 R 中的日期(季度)创建排名

转载 作者:行者123 更新时间:2023-12-04 10:39:33 25 4
gpt4 key购买 nike

我们将从以下数据表开始:

    id       date
1: 1 2016-03-31
2: 1 2015-12-31
3: 1 2015-09-30
4: 1 2015-06-30
5: 1 2015-03-31
6: 2 2016-03-31
7: 2 2015-09-30
8: 2 2015-06-30
9: 2 2015-03-31
10: 2 2014-12-31

library(data.table)
DT <- data.table(c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2),
as.IDate(c("2016-03-31", "2015-12-31", "2015-09-30", "2015-06-30",
"2015-03-31", "2016-03-31", "2015-09-30", "2015-06-30",
"2015-03-31", "2014-12-31")))
setnames(DT, c("id", "date"))

我想为每个唯一 ID 创建一个排名。特定 ID 的最新日期的排名应为 0。之后,我应该从该日期(我不考虑天数)中删除 3 个月以获得排名 -1 的日期。我必须重复这一点,直到等级 -19。在我添加一个包含排名的新列之后。

最终输出应该是这样的(注意id=2的排名):

    id       date rank_year
1: 1 2016-03-31 0
2: 1 2015-12-31 -1
3: 1 2015-09-30 -2
4: 1 2015-06-30 -3
5: 1 2015-03-31 -4
6: 2 2016-03-31 0
7: 2 2015-09-30 -2
8: 2 2015-06-30 -3
9: 2 2015-03-31 -4
10: 2 2014-12-31 -5

最佳答案

我会这样做(借用@akrun 的回答中的 order):

DT[order(-date), rank_year := {
z = month(date) + year(date)*12
as.integer( (z - z[1L])/3 )
}, by=id]

id date rank_year
1: 1 2016-03-31 0
2: 1 2015-12-31 -1
3: 1 2015-09-30 -2
4: 1 2015-06-30 -3
5: 1 2015-03-31 -4
6: 2 2016-03-31 0
7: 2 2015-09-30 -2
8: 2 2015-06-30 -3
9: 2 2015-03-31 -4
10: 2 2014-12-31 -5

关于r - 根据 R 中的日期(季度)创建排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38079910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com