【发布时间】:2021-01-15 20:15:18
【问题描述】:
我有一个数据集查看一段时间内的交易,我正在尝试识别每个 ID 的交易周期。数据的基本示例如下所示。
# id date
# 1 2018-02-01
# 1 2018-03-01
# 1 2018-04-01
# 1 2018-05-01
# 1 2018-06-01
# 1 2018-06-01
# 2 2018-02-01
# 2 2018-03-01
# 2 2018-05-01
# 2 2019-01-01
# 2 2019-02-01
# 2 2020-06-12
# 2 2020-07-13
# 2 2020-08-11
我想要做的是根据先前记录日期的接近程度对数据进行分组。因此,如果id 的间隔不超过 3 个月,他们将获得相同的组号。我已经整理了一个示例,说明期望的结果是什么样的。
# id date group
# 1 2018-02-01 1
# 1 2018-03-01 1
# 1 2018-04-01 1
# 1 2018-05-01 1
# 1 2018-06-01 1
# 1 2018-06-01 1
# 2 2018-02-01 1
# 2 2018-03-01 1
# 2 2018-05-01 1
# 2 2019-01-01 2
# 2 2019-02-01 2
# 2 2020-06-12 3
# 2 2020-07-13 3
# 2 2020-08-11 3
所以我尝试考虑使用rleid() 或使用shift() 向前或向后看的解决方案,但无法为此找到合适的解决方案。我确实想知道其中一些是否归结为缺乏 R 词汇,所以任何想法都将不胜感激。
【问题讨论】:
-
可以
setDT(df)[, group := c(0, cumsum((diff(month(date)) + diff(year(date)) * 12) > 3)) + 1]或者你如果你真的不关心精确度,可以只做df[, group := c(0, cumsum(diff(date) > 90)) + 1]或df[, group := c(0, cumsum(`units<-`(diff(date), "weeks") > 13)) + 1] -
数据 >90 版本很不错。 cumsum 绝对是一种享受。我试过
ifelse(),但效果不太好,但这很棒。谢谢!
标签: r date data.table