我陷入了一项相当简单的数据处理任务。我在 R 中有一个类似于这个的事务数据框:
id<-c(11,11,22,22,22)
dates<-as.Date(c('2013-11-15','2013-11-16','2013-11-15','2013-11-16','2013-11-17'), "%Y-%m-%d")
example<-data.frame(id=id,dates=dates)
id dates
1 11 2013-11-15
2 11 2013-11-16
3 22 2013-11-15
4 22 2013-11-16
5 22 2013-11-17
我正在寻找一种方法来保留上一次交易的日期。结果表如下所示:
previous_dates<-as.Date(c('','2013-11-15','','2013-11-15','2013-11-16'), "%Y-%m-%d")
example2<-data.frame(id=id,dates=dates, previous_dates=previous_dates)
id dates previous_dates
1 11 2013-11-15 <NA>
2 11 2013-11-16 2013-11-15
3 22 2013-11-15 <NA>
4 22 2013-11-16 2013-11-15
5 22 2013-11-17 2013-11-16
我研究了其他类似的问题,一个非常接近我想要的解决方案是:
library(data.table)
dt <- as.data.table(example)
prev_date <- function(x) c(x[1],x)
dt[,prev:=prev_date(dates), by=id]
这个问题是,如果没有以前的日期(比如在 id=11 dates=2013-11-15 的情况下),该函数将输出相同的日期,从而导致:
id dates previous_dates
1 11 2013-11-15 2013-11-15
2 11 2013-11-16 2013-11-15
有人可以帮忙吗?