R: Подмножество / извлечение строк фрейма данных с шагом 12

#r #subset

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

Вопрос:

У меня есть фрейм данных с данными за каждый месяц 26-летнего периода (1993 — 2019), что составляет в общей сложности 312 строк. К сожалению, мне пришлось запаздывать с данными, поэтому теперь каждый год длится с июля t по июнь t 1. Поэтому я не могу просто извлечь год из даты.

Теперь я хочу исключить данные за 12 месяцев за каждый год в отдельном фрейме данных. Моя первая идея — вставить в первый столбец год и использовать функцию lapply для последующей фильтрации.

Для этого я создал следующий цикл:

 n <- 1
m <- 1993
for (a in 1:26) {
  for (i in n:(n 11)) {
    t.monthly.ret.lag[i,1] <- m
  }
  n <- n 1
  m <- m 1
}
  

К сожалению, R не называет год с шагом 12. Вместо этого подсчет ведется непосредственно с шагом 1.

Кто-нибудь знает, как это решить или, может быть, знает лучший способ сделать это?

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

1. Мне не совсем ясно, чего именно вы пытаетесь достичь, и что t собой представляет, но вы всегда можете индексировать строки с шагом 12, используя seq , и вы можете использовать seq также для дат, таких как seq.Date(from = as.Date("1993-01-01"), by = "month", length.out = 312) или seq.Date(from = as.Date("1993-06-11"), by = "month", length.out = 312) , и т.д..

Ответ №1:

 y.first <- 1993
y.last <- 2019

month.col <- rep(c(7:12, 1:6), y.last-y.first 1)
year.col <- rep(c(y.first:y.last), each=length(month.name))
df <- data.frame(year=year.col, month=month.col)  
  

В результате получается фрейм данных с соответствующими тегами месяцев и года, что дополнительно позволяет использовать dplyr::group_by() и так далее.

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

1. Боты отметили ваш вопрос для удаления из-за отсутствия контекста. Теперь мы не можем извлечь из этого урок. Пожалуйста, обновите ответ пояснением.

Ответ №2:

Вы могли бы просто создать вектор длиной в 312 элементов, задающий год (и один, задающий месяц), используя rep() и seq() . Затем вы можете прикрепить их в качестве дополнительных столбцов к вашему data.frame или просто использовать их в качестве ссылки для месяца и года.

 month = rep(seq(1:12),27)
year = c(matrix(rep(seq(1:27),12),ncol=27,byrow=T) 1992)
month = month[7:(length(month)-6)]
year = year[7:(length(year)-6)]
  

Вектор месяца отсчитывается от 1 до 12, начиная с 6, вектор года повторяет год 12 раз (первый и последний только 6 раз).