我正在尝试将不同设备的每日数据样本转换为数据集的特定列,并将其转换为按两个键(小时和因子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')]
任何帮助将不胜感激!
答案 0 :(得分:1)
不确定我是否100%遵循此处的预期用法,但这里是我可能会遇到类似问题的方法。
基本上,您可以使用seq.Date()
生成一系列常规日期,然后使用data.table' CJ()
(交叉联接)功能为您的小时数组合重复该系列和因素。
一旦你有一个常规系列,你可以加入原始数据,以获得我认为你正在寻找的定期间隔数据。我从未在R中真正处理过专门的时间序列类型对象,我始终能够通过data.table
,zoo
和{{1来完成我需要的一切包裹。
希望这可能有所帮助。
RcppRoll