【问题标题】:How to filter or subset specific date and time intervals in R? Lubridate?如何在 R 中过滤或子集特定的日期和时间间隔?润滑?
【发布时间】:2015-08-11 12:40:09
【问题描述】:

我有一个由两列组成的数据集。一个日期时间列和一个带有数值的列。它是一个简单的数据集,所以我没有附加它..

我需要做的是过滤或子集与课程表相对应的数据,以便我得到一个数据集/数据框,其中包含日期时间值和数值班级有讲座的时间 仅限。

课程表与一周中的每一天都不同,例如周一 8:00-9.50、10.30-11.30、14.50-15:50。周二 10.30-11.30、14.10-15.30、周三...以此类推。

知道我该怎么做吗?

我通常将日期时间值转换为 POSIXct 格式,但最近我读到了 lubridate。

我仍然不确定如何有效地使用所有这些标准进行子集化。

也许我应该首先根据工作日对数据进行子集化。 然后根据上课时间对不同的工作日进行子集化...

希望有人可以帮助我。

顺便说一句:这些数据是 2014 年全年的数据,所以我实际上必须在班级放假时避免数据......

【问题讨论】:

  • 发布您到目前为止尝试过的代码,并指定哪些代码不起作用。一旦以有用的方式组织数据,似乎一个简单的subset 命令就可以完成这项工作
  • “它是一个简单的数据集,所以我没有附加它”——这是最好的附加类型,至少是它的一个样本。为什么?好吧,因为我们不知道在“日期时间列和具有数值的列”的上下文中,有讲座的课程意味着什么。听起来您有一些辅助数据集,您应该进行合并。

标签: r datetime filtering posixct lubridate


【解决方案1】:

我会试试这个,其中 D$Time 是 POSIXct 格式:

# Create column with weekday
D$Weekday <- D$Time
D$Weekday <- weekdays(as.Date(D$Time))

# Subset weekdays
MO <- subset(D, D$Weekday == "Monday")
head(MO)
TU <- subset(D, D$Weekday == "Tuesday")
WE <- subset(D, D$Weekday == "Wednesday")
MO <- subset(D, D$Weekday == "Thursday")
MO <- subset(D, D$Weekday == "Friday")
MO <- subset(D, D$Weekday == "Saturday")

# Subset lecture of weekday
MO_L1 <- subset(MO, format(MO$Time, "%H:%M:$S") > "07:55:00" &
              format(MO$Time, "%H:%M:$S") < "09:30:00")
head(MO_L1)
tail(MO_L1)
MO_L2 <- subset(MO, format(MO$Time, "%H:%M:$S") > "10:55:00" &
              format(MO$Time, "%H:%M:$S") < "11:30:00")

最后将所有子集组合成一个新数据集...

【讨论】:

    【解决方案2】:

    将类间隔转换为lubridate 中的interval 类。然后根据日期是否在区间内的测试进行子集...

    > a <- new_interval(Sys.time(), Sys.time() + 120)
    > Sys.time() %within% a
    [1] TRUE
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      • 2019-10-26
      • 2012-02-04
      • 2018-11-17
      • 2016-10-17
      • 2016-06-04
      相关资源
      最近更新 更多