У меня есть ежемесячный набор данных, но не каждый месяц есть подходящие данные для работы. Есть список подходящих месяцев, которые я хочу выбрать. Я хочу выбрать цену следующего месяца для каждого из этих подходящих месяцев.
Например, это мой набор данных:
Price <- c(10,12,14,11,17,10,9,18,16,16 , 12, 13)
date <- ymd(c("1996-01-31", "1996-02-28", "1996-07-31", "1996-08-29" ,"1996-04-30" , "1996-05-28" , "1997-01-28" , "1996-09-29" , "1996-12-19", "1996-03-30" ,"1996-11-30","1996-06-30"))
Prices <- data.frame( date , Price)
и это подходящие месяцы для выбора:
proper <- ymd(c("1996-01-31", "1996-07-31" ,"1996-04-30" ,"1996-02-29" ,"1996-05-31"))
Теперь я хочу получить цену proper
в следующем месяце во фрейме данных. например цены "1996-02-28" как первый элемент, "1996-08-29" как второй элемент и т. д.
Мы могли бы преобразовать его в yearmon
, а затем сделать filter
library(zoo)
library(dplyr)
Prices %>%
filter(as.Date(as.yearmon(date)) %in% as.Date(as.yearmon(proper) + 1/12))
# date Price
#1 1996-02-28 12
#2 1996-08-29 11
#3 1996-05-28 10
#4 1996-03-30 16
#5 1996-06-30 13
Это хорошо сработало, спасибо. В вашем окончательном ответе указаны даты следующего месяца. Что, если я хочу, чтобы даты в окончательном ответе были датами «правильного»? Это потому, что я хочу объединить эти данные где-то еще, и теперь они не будут объединяться должным образом.
@AliEbadi В этом случае просто удалите + 1/12
. Это будет в следующем месяце, т.е. Prices %>% filter(as.Date(as.yearmon(date)) %in% as.Date(as.yearmon(proper)))
.
Можете ли вы показать пример желаемого фрейма данных? Я не понимаю, что вы хотите здесь делать.