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

在data.table groupby的ts函数中定义开始和结束,r,data.table,time-series,R,Data.table,Time Series,我试图将数据集的一个特定列(包含不同设备的每日数据样本)转换为一个时间序列列,该列由两个键hour和factor1分组 我的数据是这样的 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 19

我试图将数据集的一个特定列(包含不同设备的每日数据样本)转换为一个时间序列列,该列由两个键hour和factor1分组

我的数据是这样的

         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月1日到2017年8月1日,小时有上午和下午两个级别,系数1有很多级别,目前不需要工作日。我想转换为timeseries数据的列是volume

我试着这样做:

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)]
因此,我得到了期望的输出,但当我试图总结所有不同的因素1水平和小时数时,我不知道如何输入正确的开始和结束日期。到目前为止,我设法做到了这一点,但它似乎给出了一个坏的输出

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

任何帮助都将不胜感激

不确定我是否100%遵循了这里的预期用途,但这里有一个尝试,我可以如何处理类似的问题

基本上,您可以使用seq.Date生成一系列常规日期,然后使用data.table的CJ交叉联接函数为每个小时和系数组合重复该系列

一旦你有了一个规则的序列,你可以加入你的原始数据,得到我认为你正在寻找的规则间隔的数据。我从来没有在R中真正处理过专门的时间序列类型的对象,我总是能够用data.table、zoo和RcppRoll包完成我需要的一切

希望这能有所帮助

library(data.table)

DT <- data.table(Date = as.Date(c("2015-10-01","2015-10-25","2015-11-04","2015-11-06")),
                 hour = c("AM","PM","AM","PM"),
                 factor1 = c("A","B","C","D"),
                 volume = c(1,2,3,4))

## Create a regular sequence of all dates in range 
## with a row for each combo of hour and factor1
TS <- CJ(Date = seq.Date(from = DT[,min(Date)], to = DT[,max(Date)],by = "day"),
         hour = DT[,unique(hour)],
         factor1 = DT[,unique(factor1)])

## Join the data to this expanded time series

setkey(DT,Date,hour,factor1)
setkey(TS,Date,hour,factor1)

TS <- DT[TS]

## Fill with zeros if necessary
TS[is.na(volume), volume := 0]

## If you want a separate column for factor level
Wide <- dcast(TS, ... ~ factor1, value.var = "volume")

## Or if you want a column (time series) for each combo
VeryWide <- dcast(TS, ... ~ factor1 + hour, value.var = "volume")

这并不是我想要的答案,但它非常有用。我想要的是在同一个数据帧中,以某种方式定义新列上的ts,但每个ts都不同,因为每个因子1和小时可以有不同的长度。。。我不知道我是否在解释我自己。无论如何,非常感谢你的帮助。