R:窗口()函数
问题描述:
我有一个名为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
任何提示?
答
当您创建时间序列对象时,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
我明白了 - 谢谢... 随着动物园对象有办法做我想要的效率吗?我需要能够根据开始和结束数字POSIX时间戳来访问时间窗口。 – 2011-12-18 01:47:25
是的。 'zoo-objects'有一个'window'方法。我会添加一个例子。 – 2011-12-18 02:11:26
优秀!万分感谢。 – 2011-12-18 04:14:14