2017-04-04 52 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