2017-02-02 4 views
0

私は現在、data.tableNameと、Idを1日あたりリサイクルしています。ユニークでない日付の列には週2回適用しますか?

Date   Name    Id   Widgets 
2016-12-31  Bob Jones   0052A00001 5 
2016-12-31  James Smith   0052A00002 25 
2016-12-31  Tom Wilson   0052A00003 29 
... 
2016-01-31  Bob Jones   0052A00001 8 
2016-01-31  James Smith   0052A00002 18 
2016-01-31  Tom Wilson   0052A00003 20 

日付ごとに一意の値が存在しないため、これにzoo機能apply.weeklyを適用することは可能ですか?そうでない場合は、これを週単位の値(または別の長さの期間 - たとえば4日間)で集計し、それに応じてグループ化を作成する最も簡単な方法は何ですか?

+0

「apply.weekly」が 'data.frame'または' data.table'に作用するかどうかはわかりません。 'Date'を週単位の値に変換し、' aggregate'関数を使うことができます。 –

答えて

1

週に一致する前にグループ化を作成することができます。 cutで遊んで、目的のグループを得ることができます。

grpWeek <- data.table(Date=seq.Date(as.Date("2016-01-01"), as.Date("2016-12-31"), by="1 day"))[, 
    list(Date, 
     DT_Week=week(Date), 
     Week_Num=format(Date, "%W"), 
     User_Week=cut(Date, breaks=52, labels=paste0("Week",1:52)))] 

dt <- fread("Date,Name,Id,Widgets 
2016-12-31,Bob Jones,0052A00001,5 
2016-12-31,James Smith,0052A00002,25 
2016-12-31,Tom Wilson,0052A00003,29 
2016-01-31,Bob Jones,0052A00001,8 
2016-01-31,James Smith,0052A00002,18 
2016-01-31,Tom Wilson,0052A00003,20") 
dt[,Date:=as.Date(Date)] 

grpWeek[dt, on="Date"] 
関連する問題