R语言 不同ID组if语句

wbgh16ku  于 2023-03-20  发布在  其他
关注(0)|答案(1)|浏览(154)

我有10000个ID,它们都有不同数量的购买日期(最少1个)。每个客户ID,我想找出购买日期之间的天数是否超过183天(即半年)。我只需要一个是或否(二进制)的答案。我现在的代码如下,但它不工作

for (id in 10000){
  for (i in length(purchase_date[id])){
    for (j in length(purchase_date[id])-1){
      if (as.numeric(purchase_date[i]-purchase_date[j])>=183){
        above_half_year <- 1
        }else{
          above_half_year <- 0 
        }
    }
  }
}

数据集的顶部如下所示

ID  purchase_date 
1   1  2014-01-13 
2   1  2014-04-14 
3   1  2014-08-13 
4   1  2014-09-12 
5   1  2014-11-12 
6   1  2015-02-13 
7   1  2017-02-14 
8   1  2018-12-13 
9   1  2019-04-15
10  2  2016-03-01 
11  3  2016-06-13 
12  3  2016-09-20
13  3  2016-10-20 
14  3  2016-11-21 
15  3  2016-12-20

预期输出为

ID  purchase_date above_half_year
1   1  2014-01-13    0
2   1  2014-04-14    0
3   1  2014-08-13    0
4   1  2014-09-12    0
5   1  2014-11-12    0
6   1  2015-02-13    0
7   1  2017-02-14    1
8   1  2018-12-13    1
9   1  2019-04-15    0
10  2  2016-03-01    0
11  3  2016-06-13    0
12  3  2016-09-20    0
13  3  2016-10-20    0
14  3  2016-11-21    0
15  3  2016-12-20    0

提前感谢您的帮助!期待您的建议

mo49yndu

mo49yndu1#

这是一种使用dplyr的方法

df %>%
  group_by(ID) %>%
  mutate(above_half_year = if_else(purchase_date - lag(purchase_date) > 183, 1, 0))

相关问题