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)是使用它的那些答案之一。不知道它是否是唯一的一個,或者是我學過它的那個。 –