【问题标题】:Apply.weekly for non unique date column?Apply.weekly 用于非唯一日期列?
【发布时间】:2017-02-02 18:40:08
【问题描述】:

我目前有以下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 天)聚合它并根据它创建分组?

【问题讨论】:

  • 我不确定apply.weekly 是否适用于data.framedata.table。您可以将Date 转换为每周值,然后使用aggregate 函数。

标签: r data.table subset zoo


【解决方案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"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-14
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多