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

我々はdata.tableshift操作でグループを使用してこれを行うことができます

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

期待される結果。 'カスト' によってグループ化され、(setDT(df1)) 'data.table' に 'data.frame' を変換し、 '日付' のリード値を取得し、 '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> 

NOTEとして(:=)を割り当てます:If OPは、 '日付は特定の形式であることを望んでいた、format

+1

完全に動作します。ありがとうございました!! – Mark

関連する問題