Создание векторов месяцев и лет на основе двух дат - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть даты начала и окончания, как показано ниже:

date1 <- '01-03-2011'
date2 <- '30-09-2013'

Исходя из этого, я хотел бы два создать вектор, содержащий следующие месяцы и годы, что-то вроде ниже:

months <- c(3:12, 1:12, 1:9)
years <- c(rep(2011, 10), rep(2012, 12), rep(2013, 9))

Какой самый быстрый способ сделать это?

Ответы [ 3 ]

0 голосов
/ 25 сентября 2018

С lubridate:

library(lubridate)

dates <- seq(dmy(date1), dmy(date2), by = 'month')
months <- month(dates)
years <- year(dates)

или с format в базе R:

months <- as.numeric(format(dates, "%m"))
years <- as.numeric(format(dates, "%Y"))

Выход:

> months
 [1]  3  4  5  6  7  8  9 10 11 12  1  2  3  4  5  6  7  8  9 10 11 12  1  2  3  4  5
[28]  6  7  8  9
> years
 [1] 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2012 2012 2012 2012 2012 2012
[17] 2012 2012 2012 2012 2012 2012 2013 2013 2013 2013 2013 2013 2013 2013 2013
0 голосов
/ 25 сентября 2018

Создайте годовой вектор по месяцам, а затем выберите годы и месяцы:

library(zoo)

fmt <- "%d-%m-%Y"
ym <- seq(as.yearmon(date1, fmt), as.yearmon(date2, fmt), by = 1/12)
years <- as.integer(ym)
months <- cycle(ym)

В пересчете на трубы magrittr:

library(magrittr)
library(zoo)

fmt <- "%d-%m-%Y"
data.frame(date1, date2) %$%
  seq(as.yearmon(date1, fmt), as.yearmon(date2, fmt), by = 1/12) %>% 
  { data.frame(year = as.integer(.), month = cycle(.)) }
0 голосов
/ 25 сентября 2018

Попробуйте:

date1 <- "01-03-2011"
date2 <- "30-09-2013"
dates <- seq(as.Date(date1, "%d-%m-%Y"), as.Date(date2, "%d-%m-%Y"), by = "month")
as.numeric(substring(dates, 6, 7)) # months
# [1]  3  4  5  6  7  8  9 10 11 12  1  2  3  4  5  6  7  8  9 10 11 12  1  2  3  4  5  6  7  8  9
as.numeric(substring(dates, 1, 4)) # years
# [1] 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2012 2012 2012 2012 2012 2012 2012 2012 2012 2012 2012 2012 2013
#[24] 2013 2013 2013 2013 2013 2013 2013 2013
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...