在R上拉本月的第N天在XTS(Pull nth Day of Month in XTS in R)

2019-07-01 16:00发布

我的问题是密切相关的一个在这里问: 拉从,使用R XTS对象每月的第一个工作日返回 。

相反提取每个月的第一天,我想提取,说每个月的10日数据点。 我怎样才能做到这一点?

Answer 1:

从您连这个问题使用相同的数据。例如,你可以做一些基本的子集。

这里的样本数据:

library(xts)
data(sample_matrix)
x <- as.xts(sample_matrix)

这里的子集:

x[format(index(x), "%d") == "10"]
#                Open     High      Low    Close
# 2007-01-10 49.91228 50.13053 49.91228 49.97246
# 2007-02-10 50.68923 50.72696 50.60707 50.69562
# 2007-03-10 49.79370 49.88984 49.70385 49.88698
# 2007-04-10 49.55704 49.78776 49.55704 49.76984
# 2007-05-10 48.83479 48.84549 48.38001 48.38001
# 2007-06-10 47.74899 47.74899 47.28685 47.28685

难道这就是你要找的人?


使用%in%能给你一些更大的灵活性。 举例来说,如果你想要的第十,第十一,每个月的第十二天,你可以使用x[format(index(x), "%d") %in% c("10", "11", "12")]代替。


更新

如果,正如你在有更新,要提取第10个数据点 ,就可以使用匿名函数如下:

do.call(rbind, lapply(split(x, "months"), function(x) x[10]))
#                Open     High      Low    Close
# 2007-01-11 49.88529 50.23910 49.88529 50.23910
# 2007-02-10 50.68923 50.72696 50.60707 50.69562
# 2007-03-10 49.79370 49.88984 49.70385 49.88698
# 2007-04-10 49.55704 49.78776 49.55704 49.76984
# 2007-05-10 48.83479 48.84549 48.38001 48.38001
# 2007-06-10 47.74899 47.74899 47.28685 47.28685

请注意,第一行是一个月的第十一天,因为数据实际上开始于2007年1月2日。

x[1, ]
#                Open     High      Low    Close
# 2007-01-02 50.03978 50.11778 49.95041 50.11778


Answer 2:

XTS拥有这些类型的子集的一些内置的功能。

> data(sample_matrix)
> x <- as.xts(sample_matrix)
> x[.indexmday(x) == 10]
               Open     High      Low    Close
2007-01-10 49.91228 50.13053 49.91228 49.97246
2007-02-10 50.68923 50.72696 50.60707 50.69562
2007-03-10 49.79370 49.88984 49.70385 49.88698
2007-04-10 49.55704 49.78776 49.55704 49.76984
2007-05-10 48.83479 48.84549 48.38001 48.38001
2007-06-10 47.74899 47.74899 47.28685 47.28685

请参阅帮助页面?indexClass他们所有的列表。



文章来源: Pull nth Day of Month in XTS in R
标签: r subset xts