R:window()函数

Mik*_*der 4 r window

我有一个名为的矩阵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)

有小费吗?

42-*_*42- 5

当您创建时间序列对象时,该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)