2011-12-17 155 views
4

我有一个名为x矩阵,看起来像这样:R:窗口()函数

 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 

我把它与tser<- ts(x)1

转换为时间序列数据类型(mts[2000])现在我想使用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 

任何提示?

回答

5

当您创建时间序列对象时,ts函数期望第一个参数是数据并且没有时间。 (你可能仍要使用动物园的对象,他们更有意义。)请参阅本会发生什么:

> window(tser[,1],start=5,end=8) 
Time Series: 
Start = 5 
End = 8 
Frequency = 1 
[1] 1275264900 1275265200 1275265500 1275265800 

日期(以数字表示)已成为数据!

要使用动物园,它非常简单。我不确定你的出发点是什么。我有一个数据框中的数据。如果你实际上有一个矩阵(我怀疑它,因为它看起来不像矩阵对象的输出),你可以使用“[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 
+0

我明白了 - 谢谢... 随着动物园对象有办法做我想要的效率吗?我需要能够根据开始和结束数字POSIX时间戳来访问时间窗口。 – 2011-12-18 01:47:25

+0

是的。 'zoo-objects'有一个'window'方法。我会添加一个例子。 – 2011-12-18 02:11:26

+0

优秀!万分感谢。 – 2011-12-18 04:14:14