在data.table groupby中定义ts函数中的开始和结束

时间:2017-10-17 21:31:25

标签: r data.table time-series

我正在尝试将不同设备的每日数据样本转换为数据集的特定列,并将其转换为按两个键(小时和因子1)分组的时间序列列

我的数据是这样的

         date    hour factor1 volume    wkday 
1: 2015-10-01     AM   11011    530  Thursday    
2: 2015-10-01     AM   11012   1535  Thursday    
3: 2015-10-01     AM   11021    191  Thursday    
4: 2015-10-01     AM   11131   1108  Thursday    
5: 2015-10-01     AM   11132   1518  Thursday    
6: 2015-10-01     AM   11141    508  Thursday    

日期从2015-10-01到2017-08-01,小时有两个级别(上午和下午),因子1有很多级别,到目前为止还不需要wkday。我想要变成时间序列数据的列是音量。

我试过这样做:

table_11011 = table[factor1 == '11011']
table_11011_am = table_11011[hour == 'AM']

table_11011_am[, vol_ts := ts(table_11011_am[,volume],
                  start = decimal_date(table_11011_am[, date][1]),
                  frequency = 365)]

因此我获得了所需的输出,但是当我尝试总结所有不同的factor1级别和小时时,我不知道如何输入正确的开始和结束日期。到目前为止,我设法做到了这一点,但它似乎给出了糟糕的输出。

table[, vol_ts := ts(volume,
                   start = decimal_date(table[, date][1]), frequency = 365), by = c('factor1', 'hour')]

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

不确定我是否100%遵循此处的预期用法,但这里是我可能会遇到类似问题的方法。

基本上,您可以使用seq.Date()生成一系列常规日期,然后使用data.table' CJ()(交叉联接)功能为您的小时数组合重复该系列和因素。

一旦你有一个常规系列,你可以加入原始数据,以获得我认为你正在寻找的定期间隔数据。我从未在R中真正处理过专门的时间序列类型对象,我始终能够通过data.tablezoo和{{1来完成我需要的一切包裹。

希望这可能有所帮助。

RcppRoll