#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 года … и так далее…