Apply.weekly for non unique date column?

时间:2017-02-02 18:40:09

标签: r data.table subset zoo

我目前拥有以下data.table,每天NameId回收。

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天)聚合,并根据该值创建分组?

1 个答案:

答案 0 :(得分: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"]