我有一个名为的矩阵x,如下所示:
pTime Close
1 1275087600 1.2268
2 1275264000 1.2264
3 1275264300 1.2265
4 1275264600 1.2268
5 1275264900 1.2265
6 1275265200 1.2265
7 1275265500 1.2270
8 1275265800 1.2269
9 1275266100 1.2268
10 1275266400 1.2275
...1000 rows
Run Code Online (Sandbox Code Playgroud)
我把它转换为时间序列数据类型(mts[2000])tser<- ts(x)1
现在我想使用window()函数(从stats包中)根据它们的POSIX时间戳(pTime字段)隔离#5和#8之间的所有行,但是我收到一条错误消息.
> A<- as.POSIXct(tser[5,1],origin="1970-01-01 00:00:00 UTC")
> B<- as.POSIXct(tser[8,1],origin="1970-01-01 00:00:00 UTC")
> A
pTime
"2010-05-31 01:15:00 EDT"
> B
pTime
"2010-05-31 01:30:00 EDT"
> window(tser[,1],A,B)
Error in window.default(x, ...) : 'start' cannot be after 'end'
In addition: Warning message:
In window.default(x, ...) : 'end' value not changed
Run Code Online (Sandbox Code Playgroud)
有小费吗?
当您创建时间序列对象时,该ts函数期望第一个参数是数据,并且没有时间.(你可能想要使用zoo-objects.它们更有意义.)看看会发生什么:
> window(tser[,1],start=5,end=8)
Time Series:
Start = 5
End = 8
Frequency = 1
[1] 1275264900 1275265200 1275265500 1275265800
Run Code Online (Sandbox Code Playgroud)
您的日期(以数字表示)已成为数据!
要使用动物园,它非常直接.我不确定你的起点是什么.我在数据框中有数据.如果你实际上有一个矩阵(我怀疑它,因为它看起来不像矩阵对象的输出),你可以使用"[row,col]"样式的访问.
require(zoo)
zooser <- zoo(x=tser$Close, order.by=as.POSIXct(tser$pTime, origin="1970-01-01"))
window(zooser, start=A, end=B)
#2010-05-31 01:15:00 2010-05-31 01:20:00 2010-05-31 01:25:00
# 1.2265 1.2265 1.2270
#2010-05-31 01:30:00
# 1.2269
Run Code Online (Sandbox Code Playgroud)