如何在R中重新采样XTS时间序列?


9

我有一个不规则间隔的XTS时间序列(POSIXct值作为索引类型)。

如何建立以10分钟为间隔采样的新时间序列,但每个采样时刻都与一个整点时间对齐(13:00:00、13:10:00、13:20:00等) 。如果重采样时刻不完全符合原始序列值,那么我想取前一个。


你能举个例子吗?
Joshua Ulrich 2010年

2
如果找到xts的常见问题解答列表,则将获得很高的评分。请在这里四处看看,搜索[r] xts并仔细阅读r-sig-finance档案。
Dirk Eddelbuettel 2010年

Answers:


5
library(xts)
?endpoints

例如

tmp=zoo(rnorm(1000), as.POSIXct("2010-02-1")+(1:1000)*60)
tmp[endpoints(tmp, "minutes", 20)]

每20分钟进行一次子采样。你可能也想看看to.minutesto.daily等等。


只有一个小问题-如果我有...,14:59,15:00,...,它将检索14:59而不是我想要的15:00。有没有办法让它在15:00返回?我尝试了类似的方法"seconds", 3601,但是它不起作用
Meh 2010年

由于时间戳是不规则的,因此只能保证数据点之间的dt。实际点取决于系列的起点。如果您将起点固定为一个小时,它将表现为您喜欢的...(假设您每N分钟就有一个积分)
G博士2010年

这正是我所不想要的-依赖于第一点
Meh 2010年

2

我仍然不确定您要做什么,我仍然认为举个例子会有所帮助,但我想我想您可能会对感兴趣align.time

# Compare this:
tmp[endpoints(tmp, "minutes", 20)]
# with this:
align.time( tmp[endpoints(tmp, "minutes", 20)], n=60*20 )

考虑任何时间序列-外部温度。我想知道什么是在11:00挂钟的温度,在12:00挂钟,......我以后会检查你的例子,看它是否做到这一点

据我所知,Adal希望使用端点之后的align.time应用程序(除了提到在原始问题中提到“取前一个”之外)。无论如何,这就是我想要的,所以谢谢约书亚。
Rahul Savani

是否有align.time版本,但向下取整而不向上取整?它也正是我想要的,但为此。(顺便说一句,我有一个粗略的方法:如果a1是我的XTS对象,并且我想四舍五入到分钟间隔,那么index(a1)=index(a1)-60;align.time(a1,60)
Darren Cook

1
@DarrenCook:align.time没有那个版本。无论如何,将观测值与观测值发生之前的时间对齐似乎是一个坏主意。
Joshua Ulrich

2
@JoshuaUlrich一个示例是将财务报价转换为小节。08:00表示从08:00:00到08:00:59的分钟。08:00为小时柱,代表08:00:00至08:59:59。(这与每日柱线的工作方式一致,其中2011-11-25表示在2011-11-25进行交易,而不是2011-11-24。)我认为这是OP想要的相同行为。
达伦·库克

1

如果a是一个xts对象,其中包含第二个分辨率的条目,则将终止所有秒数:index(a)= trunc(index(a),“ mins”)

您也可以使用它来舍入到“小时”分辨率。但是不支持10分钟。为此,您必须这样做:

x=as.POSIXlt(index(a))
x$sec[]=0;x$min[]=x$min[]%/%10
index(a)=x

a=align.time.down(a,600)您定义的位置:

align.time.down=function(x,n){index(x)=index(x)-n;align.time(x,n)}

(我自己的脚本中的最后一个选择已经消失了。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.