Как я могу назначить уровень на основе того, находится ли дата в пределах диапазона? - PullRequest
0 голосов
/ 16 января 2019

Мне нужно создать столбец в рамке даты, в котором указано, в каком диапазоне дат находится каждое наблюдение.

Пример данных:

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 в зависимости от того, в каком диапазоне дат находится наблюдение.

...