R 统计data.table中事件发生后的天数
我们可以使用R 统计data.table中事件发生后的天数,r,date,data.table,R,Date,Data.table,我们可以使用zoo中的na.locf创建一个新的日期列,其中count>0的最后一天的日期向下填充,并取该列的lag,因为如果给定日期本身具有count>0,我们不希望返回0天。相反,我们要从上一个非零日期开始计算天数。最后,我们找到date和date2之间的difftime: c(NA, 1, 2, 4, 1, 1, 1, 1, 1, 2, 5, 6, 9, 10, 2, 3, NA, NA, 2, 2, 3, 1, 2, 1, 1, 2, 5, 1, 4, 1, 2, 3) 结果: lib
zoo
中的na.locf
创建一个新的日期列,其中count>0
的最后一天的日期向下填充,并取该列的lag
,因为如果给定日期本身具有count>0
,我们不希望返回0天。相反,我们要从上一个非零日期开始计算天数。最后,我们找到date
和date2
之间的difftime
:
c(NA, 1, 2, 4, 1, 1, 1, 1, 1, 2, 5, 6, 9, 10, 2, 3, NA, NA, 2, 2, 3, 1, 2, 1, 1, 2, 5, 1, 4, 1, 2, 3)
结果:
library(data.table)
library(zoo)
dt[,count2 := difftime(date, na.locf(lag(ifelse(count > 0, date, NA)), na.rm = FALSE)), by = id]
library(data.table)
library(zoo)
dt[,count2 := difftime(date, na.locf(lag(ifelse(count > 0, date, NA)), na.rm = FALSE)), by = id]
id date count count2
1: 0151 2011-08-09 7 NA days
2: 0151 2011-08-10 1 1 days
3: 0151 2011-08-12 0 2 days
4: 0151 2011-08-14 4 4 days
5: 0151 2011-08-15 1 1 days
6: 0151 2011-08-16 4 1 days
7: 0151 2011-08-17 2 1 days
8: 0151 2011-08-18 1 1 days
9: 0151 2011-08-19 0 1 days
10: 0151 2011-08-20 0 2 days
11: 0151 2011-08-23 0 5 days
12: 0151 2011-08-24 0 6 days
13: 0151 2011-08-27 0 9 days
14: 0151 2011-08-28 1 10 days
15: 0151 2011-08-30 0 2 days
16: 0151 2011-08-31 1 3 days
17: 4615 2011-08-09 0 NA days
18: 4615 2011-08-10 1 NA days
19: 4615 2011-08-12 3 2 days
20: 4615 2011-08-14 0 2 days
21: 4615 2011-08-15 1 3 days
22: 4615 2011-08-16 0 1 days
23: 4615 2011-08-17 5 2 days
24: 4615 2011-08-18 1 1 days
25: 4615 2011-08-19 0 1 days
26: 4615 2011-08-20 0 2 days
27: 4615 2011-08-23 5 5 days
28: 4615 2011-08-24 0 1 days
29: 4615 2011-08-27 1 4 days
30: 4615 2011-08-28 2 1 days
31: 4615 2011-08-30 0 2 days
32: 4615 2011-08-31 1 3 days
id date count count2