【发布时间】:2017-08-11 10:58:20
【问题描述】:
我想创建一个两个标志
order.last.30.days
order.anytime.in.past
关于以下数据。
library(data.table)
library(lubridate)
my.data <- data.table(
supplier = c("a","a","a","a","a","a","b","b","b","b","b","b"),
date = rep(c("2017-06-01","2017-03-01","2017-02-01","2017-01-12",
"2017-05-01","2017-04-01"), 2),
order = c(1,0,0,1,1,0,0,1,0,0,1,0)
)
my.data[,date := ymd(date)]
setorder(my.data, supplier, date)
my.data[, prev.date := shift(date, type = c("lag")),
by = .(supplier)]
my.data[, days.btw.dates := time_length( interval(prev.date, date),
unit = "days")]
如何使用 data.table 包中的 shift 来做到这一点?
【问题讨论】:
-
注意
data.table有相当丰富的日期函数,所以你不需要使用lubridate。
标签: r data.table dplyr tidyr