简体   繁体   English

在RTS的XTS中拉出第n个月

[英]Pull nth Day of Month in XTS in R

My questions is closely related to the one asked here: Pull Return from first business day of the month from XTS object using R . 我的问题与这里提出的问题密切相关: 使用R从XTS对象拉出本月第一个工作日的回报

Instead of extracting the first day of each month, I want to extract, say the 10th data point of each month. 我想提取每个月的第10个数据点,而不是提取每个月的第一天。 How can I do this? 我怎样才能做到这一点?

Using the same example data from the question you've linked to, you can do some basic subsetting. 使用与您链接的问题相同的示例数据,您可以执行一些基本的子集。

Here's the sample data: 这是示例数据:

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

Here's the subsetting: 这是子集:

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

Is this what you were looking for? 这是你在找什么?


Using %in% would give you some more flexibility. 使用%in%可以提供更多灵活性。 For instance, if you wanted the tenth, eleventh, and twelfth days of each month, you could use x[format(index(x), "%d") %in% c("10", "11", "12")] instead. 例如,如果你想要每个月的第十天,第十一天和第十二天,你可以x[format(index(x), "%d") %in% c("10", "11", "12")]使用x[format(index(x), "%d") %in% c("10", "11", "12")]而不是。


Update 更新

If, as you have in your update, you want to extract the tenth data point , just use an anonymous function as follows: 如果您在更新中有想要提取第十个数据点 ,只需使用匿名函数,如下所示:

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

Note that the first row is the eleventh day of the month, because the data actually starts on January 2, 2007. 请注意,第一行是该月的第11天,因为数据实际上是从2007年1月2日开始的。

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

xts has some built-in functions for these types of subsets. 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

See the help page ?indexClass for a list of all of them. 请参阅帮助页面?indexClass以获取所有这些页面的列表。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM