2
假设有一个date.frame
或data.table
上百万个人ID的观察,这样的一个子集是这样的:如何使用开始日期在R中创建滞后的结束日期?
id <- c(3,3,3,5,5)
data <- c(24,48,60,84,96)
start <- as.Date(c("2006-01-01","2009-12-09","2010-01-02","2006-04-24", "2009-12-09"))
df <- data.frame(id,data,start) ; head(df)
id data start
1 3 24 2006-01-01
2 3 48 2009-12-09
3 3 60 2010-01-02
4 5 84 2006-04-24
5 5 96 2009-12-09
而且我们希望在串联,以便创造所有其他协的结束日期期间t的结束日期是期间t + 1减去一天的开始日期。捕获是1)这需要通过ID完成,并且2)当没有t + 1时,记录得到正在进行的标记,例如, “9999-12-31”。该产品应该是这样的:
df$end <- as.Date(c("2009-12-08","2010-01-01","9999-12-31","2009-12-08",
"9999-12-31"));head(df)
id data start end
1 3 24 2006-01-01 2009-12-08
2 3 48 2009-12-09 2010-01-01
3 3 60 2010-01-02 9999-12-31
4 5 84 2006-04-24 2009-12-08
5 5 96 2009-12-09 9999-12-31
而只是作为我的回答评论...我学到了这个在SO上使用'head'和'tail'这个巧妙的小技巧。 [这](http://stackoverflow.com/questions/15533805/how-to-find-the-last-or-next-entry-using-r-package-data-table-and-rolling-joins/15533947#例如,15533947)是使用它的那些答案之一。不知道它是否是唯一的一个,或者是我学过它的那个。 –