2017-02-02 40 views
0

我目前每天有以下data.tableNameId回收。Apply.weekly爲非唯一日期列?

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」轉換爲每週值,然後使用「聚合」函數。 –

回答

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"]