向 R 中的 xts/data.table 对象添加相等的 space 时间间隔
Adding equal space time intervals to an xts/data.table object in R
抱歉,如果这是一个相当简单的问题,但我对 R 和 xts
和 data.table
还很陌生,而且我无法在网上找到任何可以帮助我的东西。我有类似于以下内容的数据:
Time | Volume | ....
-----------------------------------------------
2005-03-02 11:23:40.111 | 123 | ....
2005-03-02 11:23:42.675 | 503 | ....
2005-03-02 11:23:42.749 | -2 | ....
2005-03-02 11:23:42.912 | 200 | ....
2005-03-02 11:23:43.002 | -76 | ....
2005-03-02 11:23:43.819 | -134 | ....
2005-03-02 11:23:45.353 | 506 | ....
我想在每一秒创建等间隔的时间间隔,这样上面的 table 变成下面新的 table:
Time | Volume | ....
-----------------------------------------------
2005-03-02 11:23:40 | 123 | ....
2005-03-02 11:23:41 | NA | ....
2005-03-02 11:23:42 | 701 | ....
2005-03-02 11:23:43 | -210 | ....
2005-03-02 11:23:44 | NA | ....
2005-03-02 11:23:45 | 506 | ....
更具体地说,我希望等间隔秒数从 09:00 开始,每天在 17:00 结束。
有什么好的方法吗?提前致谢
编辑:这是 dput
输出:
structure(list(HFTtimevec = structure(c(1122855297, 1122855297,
1122855309, 1122855310.87, 1122855381.82), class = c("POSIXct",
"POSIXt")), Price = c(3.48, 3.48, 3.48, 21.32, 3.48), Volume = c(2947,
1398, 920, 4000, 19735)), .Names = c("HFTtimevec", "Price", "Volume"
), row.names = c(NA, -5L), class = c("data.table", "data.frame"
), .internal.selfref = <pointer: 0x0000000002710788>)
您需要使用
dat<-data.table(dat)
dat[,Time:=strptime(HFTtimevec, "%Y-%m-%d %H:%M:%OS")]
dat1<-dat[,list(Volume=sum(Volume)),by=list(Time)]
此处您将在时间变量中创建所有数据点:
dt<-data.table(Time=seq(
ISOdatetime(year=2005, mont=03, day=02, hour=09, min=0, sec=0),
ISOdatetime(year=2005, mont=03, day=02, hour=17, min=0, sec=0),by="sec"))
newdT<-merge(dt, dat1, by="Time", all.x=T)
抱歉,如果这是一个相当简单的问题,但我对 R 和 xts
和 data.table
还很陌生,而且我无法在网上找到任何可以帮助我的东西。我有类似于以下内容的数据:
Time | Volume | ....
-----------------------------------------------
2005-03-02 11:23:40.111 | 123 | ....
2005-03-02 11:23:42.675 | 503 | ....
2005-03-02 11:23:42.749 | -2 | ....
2005-03-02 11:23:42.912 | 200 | ....
2005-03-02 11:23:43.002 | -76 | ....
2005-03-02 11:23:43.819 | -134 | ....
2005-03-02 11:23:45.353 | 506 | ....
我想在每一秒创建等间隔的时间间隔,这样上面的 table 变成下面新的 table:
Time | Volume | ....
-----------------------------------------------
2005-03-02 11:23:40 | 123 | ....
2005-03-02 11:23:41 | NA | ....
2005-03-02 11:23:42 | 701 | ....
2005-03-02 11:23:43 | -210 | ....
2005-03-02 11:23:44 | NA | ....
2005-03-02 11:23:45 | 506 | ....
更具体地说,我希望等间隔秒数从 09:00 开始,每天在 17:00 结束。
有什么好的方法吗?提前致谢
编辑:这是 dput
输出:
structure(list(HFTtimevec = structure(c(1122855297, 1122855297,
1122855309, 1122855310.87, 1122855381.82), class = c("POSIXct",
"POSIXt")), Price = c(3.48, 3.48, 3.48, 21.32, 3.48), Volume = c(2947,
1398, 920, 4000, 19735)), .Names = c("HFTtimevec", "Price", "Volume"
), row.names = c(NA, -5L), class = c("data.table", "data.frame"
), .internal.selfref = <pointer: 0x0000000002710788>)
您需要使用
dat<-data.table(dat)
dat[,Time:=strptime(HFTtimevec, "%Y-%m-%d %H:%M:%OS")]
dat1<-dat[,list(Volume=sum(Volume)),by=list(Time)]
此处您将在时间变量中创建所有数据点:
dt<-data.table(Time=seq(
ISOdatetime(year=2005, mont=03, day=02, hour=09, min=0, sec=0),
ISOdatetime(year=2005, mont=03, day=02, hour=17, min=0, sec=0),by="sec"))
newdT<-merge(dt, dat1, by="Time", all.x=T)