Потяните n-й день месяца в XTS в R

Мои вопросы тесно связаны с заданным здесь:Извлечь возврат из первого рабочего дня месяца из объекта XTS с помощью R.

Вместо того, чтобы извлекать первый день каждого месяца, я хочу извлечь, скажем, десятую точку данных каждого месяца. Как я могу это сделать?

Ответы на вопрос(2)

XTS имеет некоторые встроенные функции для этих типов подмножеств.

> data(sample_matrix)
> x <- as..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 для списка всех из них.

 A5C1D2H2I1M1N2O1R2T123 окт. 2012 г., 11:06
Я думал об этом после того, как добавил свое обновление, но на самом деле оно не решает их обновленный вопрос, где они просят десятую точку данных (при условии, что некоторые пропущенные данные) не десятый день каждого месяца.
Решение Вопроса

с которым вы связались, вы можете выполнить некоторые основные поднаборы.

Вот пример данных:

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")] вместо.

Обновить

Если, как у вас в вашем обновлении, вы хотите извлечь десятыйточка данных, просто используйте анонимную функцию следующим образом:

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

Обратите внимание, что первая строкаодиннадцатый день месяца, потому что данные на самом деле начинается 2 января 2007 года.

x[1, ]
#                Open     High      Low    Close
# 2007-01-02 50.03978 50.11778 49.95041 50.11778
 A5C1D2H2I1M1N2O1R2T122 окт. 2012 г., 08:47
@mchangun, посмотри мое обновление
 A5C1D2H2I1M1N2O1R2T122 окт. 2012 г., 08:20
Обратите внимание, что здесь не учитываются такие вещи, как рабочие дни и т. Д., А только сам десятый день.
 mchangun22 окт. 2012 г., 08:42
Я отредактировал свой вопрос, чтобы обратиться к 10-й точке данных. У меня есть проблема с использованием десятого дня месяца в том, что в течение нескольких месяцев этот день не существует в моем временном ряду.

Ваш ответ на вопрос