#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 раз).