Мне нужно создать столбец в рамке даты, в котором указано, в каком диапазоне дат находится каждое наблюдение.
Пример данных:
df <- data.frame(dt = as.POSIXct(c("2018-01-01 08:00:00", "2018-03-05 12:03:00", "2018-08-16 03:07:00")), dur = c(0, 24, 12), doo = c(3.22, 6.63, 7.13))
чтобы получить
| dt | dur | doo |
|---------------------|:---:|------|
| 2018-01-01 08:00:00 | 0 | 3.22 |
| 2018-03-05 12:03:00 | 24 | 6.63 |
| 2018-08-16 03:07:00 | 12 | 7.13 |
Я назначил интервалы для «месяцев», которые мне нужно использовать с lubridate:
mo01 <- interval(ymd("2018-01-01"), ymd("2018-01-28"))
mo03 <- interval(ymd("2018-02-26"), ymd("2018-04-01"))
mo08 <- interval(ymd("2018-07-30"), ymd("2018-08-26"))
Что бы я хотел получить, так это таблица, которая выглядит так
| dt | dur | doo | mo |
|---------------------|:---:|------|----|
| 2018-01-01 08:00:00 | 0 | 3.22 |mo01|
| 2018-03-05 12:03:00 | 24 | 6.63 |mo03|
| 2018-08-16 03:07:00 | 12 | 7.13 |mo08|
Когда я запускаю что-то подобное (думая, что мне придется бегать каждый месяц)
for (a in df$dt){
if (a %within% mo01){
df$mo = "January"
}
}
Я получаю
Error in a %within% mo01 : Argument 1 is not a recognized date-time
df $ dt - это класс "POSIXct", "POSIXt"
Я бы очень хотел иметь возможность запустить один фрагмент кода, который просматривает все даты в dt и заполняет столбец mo в зависимости от того, в каком диапазоне дат находится наблюдение.