Выбор только ежемесячного подмножества с помощью quantmod

#r #subset

#r #подмножество

Вопрос:

Я использую последние 5 лет Apple и Google, используя команду quant mode

 loadSymbols(c("AAPL", "GOOG"))
AAPL['2016::']
 

Это набор данных.

 AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted
2016-01-04   25.6525   26.3425  25.5000    26.3375   270597600      24.36454
2016-01-05   26.4375   26.4625  25.6025    25.6775   223164000      23.75398
2016-01-06   25.1400   25.5925  24.9675    25.1750   273829600      23.28912
2016-01-07   24.6700   25.0325  24.1075    24.1125   324377600      22.30621
2016-01-08   24.6375   24.7775  24.1900    24.2400   283192000      22.42415
 

Не могли бы вы предложить команду, которую я могу использовать для выбора AAPL.Объем на определенную дату каждого месяца каждого года?

Спасибо.

Комментарии:

1. Вы ищете последнюю точку, доступную в апреле?

Ответ №1:

Попробуйте это с помощью grep. Сюда входят все имена строк с 4. месяц (апрель) в данных AAPL и 5. столбец (AAPL.Объем).

 AAPL[grep("-04-", row.names(as.data.frame(AAPL))),5]
 

Первые несколько строк:

 head(AAPL[grep("-04-", row.names(as.data.frame(AAPL))),5])
           AAPL.Volume
2007-04-02   501992400
2007-04-03   583934400
2007-04-04   476784000
2007-04-05   355516000
2007-04-09   413341600
2007-04-10   352466800
 

Редактировать
В вашем случае вы можете сначала отказаться от предыдущих лет:

 AAPL <- AAPL['2016::']
head([grep("-04-", row.names(as.data.frame(AAPL))),5])
       AAPL.Volume
2016-04-01   103496000
2016-04-04   149424800
2016-04-05   106314800
2016-04-06   105616400
2016-04-07   127207600
2016-04-08    94326800
 

2. Редактировать
Чтобы извлечь определенные даты, измените команду grep следующим образом:

 head(AAPL[grep("-15$", row.names(as.data.frame(AAPL))),5])
           AAPL.Volume
2016-01-15   319335600
2016-03-15   160270800
2016-04-15   187756000
2016-06-15   117780800
2016-07-15   120548000
2016-08-15   103472800
 

Комментарии:

1. Спасибо!! Извините, в моем вопросе была информационная ошибка… Я хотел одну дату с апреля и далее для каждого месяца, например, 15 апреля 2016 года, 15 мая 2016 года, 15 июня 2016 года … и так далее…

2. Я добавил еще одну строку кода в связи с этим. Если вам нужен другой день, вы можете просто изменить число внутри grep функции.

Ответ №2:

Основываясь на комментарии, мы хотим, чтобы объем на 15-е число месяца для каждого месяца начиная с апреля и далее в каждом году. Vo (AAPL) дает объемы. Обратите внимание, что POSIXlt представляет месяцы, начинающиеся с 0, поэтому апрель — это месяц 3. Обратите внимание, что в некоторых месяцах может не быть никаких данных 15-го числа.

 Vo(AAPL)[with(as.POSIXlt(time(AAPL)), mon >= 3 amp; mday == 15)]
 

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

Первая строка такая же, как и выше, за исключением того, что == выше заменено на >= .

 v.ok <- Vo(AAPL)[with(as.POSIXlt(time(AAPL)), mon >= 3 amp; mday >= 15)]
v.ok[ !duplicated(as.yearmon(time(v.ok))) ]
 

Обновить

Исправлено и упрощено.

Комментарии:

1. Спасибо!! Извините, в моем вопросе была информационная ошибка… Я хотел одну дату с апреля и далее для каждого месяца, например, 15 апреля 2016 года, 15 мая 2016 года, 15 июня 2016 года … и так далее…