2017-04-04 56 views
2

我有一個包含日期和客戶名稱的數據框。我期待添加一個返回的日期,這是客戶下一次返回到我的數據集的時間。 R中最簡單的方法是什麼?如果客戶還沒有返回,那麼結果應該是空白的。從R數據集添加客戶下一個返回日期

Date <-seq(as.Date('2017/01/01'), as.Date('2017/01/9'), by="day") 
Cust <- c("A","B","C","A","B","C","A","B","C") 
df1 <- data.frame(Date,Cust) 

    Date Cust 
1 01/01/17 A 
2 02/01/17 B 
3 03/01/17 C 
4 04/01/17 A 
5 05/01/17 B 
6 06/01/17 C 
7 07/01/17 A 
8 08/01/17 B 
9 09/01/17 C 

預期結果

Date Cust returnedDate 
1 01/01/17 A 04/01/17 
2 02/01/17 B 05/01/17 
3 03/01/17 C 06/01/17 
4 04/01/17 A 07/01/17 
5 05/01/17 B 08/01/17 
6 06/01/17 C 09/01/17 
7 07/01/17 A NA 
8 08/01/17 B NA 
9 09/01/17 C NA 

回答

2

我們可以通過shift操作data.table做到這一點使用一組。轉換 'data.frame' 到 'data.table'(setDT(df1)),由 '卡斯特' 組合,獲得 '日期' 的鉛值和分配(:=)爲 'returnDate'

library(data.table) 
setDT(df1)[, returnDate := shift(Date, type = "lead"), Cust] 
df1 
#   Date Cust returnDate 
#1: 2017-01-01 A 2017-01-04 
#2: 2017-01-02 B 2017-01-05 
#3: 2017-01-03 C 2017-01-06 
#4: 2017-01-04 A 2017-01-07 
#5: 2017-01-05 B 2017-01-08 
#6: 2017-01-06 C 2017-01-09 
#7: 2017-01-07 A  <NA> 
#8: 2017-01-08 B  <NA> 
#9: 2017-01-09 C  <NA> 

注:如果OP要求'日期以某種格式,使用format

+1

完美地工作。謝謝!! – Mark