如何根据日期是否在范围内来分配级别?

时间:2019-01-15 23:45:15

标签: r datetime lubridate

我需要在日期框架中创建一列,以说明每个观察值位于哪个日期范围内。

样本数据:

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列。

0 个答案:

没有答案