【问题标题】:R: How do I subset based on conditional DateTime dataR:如何根据条件 DateTime 数据进行子集化
【发布时间】:2017-11-23 20:44:32
【问题描述】:

这是我的数据示例:

# A tibble: 4 x 3
  Squirrel.ID  Release.time  DetectTime
        <int>  <S4: Period>  <dttm>
1       13097   13H 13M 18S 2017-05-29 18:50:43
2       20948   10H 15M 8S  2017-06-05 08:09:48
3       21853   11H 20M 33S 2017-05-24 21:57:32
4       13088   12H 13M 45S 2017-05-30 08:44:03

我希望将其子集化为 hte DetectTime 值发生至少 1.5 小时之前 Release.time 值的行。例如,如果我有一个DetectTime 值为"2017-05-30 06:00:00" 和一个Release.time 值为"10:00:00",那么我想保留该行。如果我的DetectTime 值为"2017-05-30 10:15:00"Release.time 值为"10:00:00",那么我想排除该行。

如果有帮助,我正在与 dplyrlubridate 合作。谢谢。

【问题讨论】:

  • 感觉如果Release.timeDateTime,和DetectTime一样,而不是Period,这样会更简单。

标签: r datetime dplyr subset lubridate


【解决方案1】:

复制您的数据:

library(lubridate)

df <- data.frame(Squirrel.ID = c(13097, 20948, 21853, 13088),
      Release.time = c("13H 13M 18S", "10H 15M 8S", "11H 20M 33S", "12H 13M 45S"), 
      DetectTime = c("2017-05-29 18:50:43", "2017-06-05 08:09:48", "2017-05-24 21:57:32", "2017-05-30 08:44:03"))
df$Release.time <- hms(df$Release.time)


#   Squirrel.ID Release.time          DetectTime
#1       13097  13H 13M 18S 2017-05-29 18:50:43
#2       20948   10H 15M 8S 2017-06-05 08:09:48
#3       21853  11H 20M 33S 2017-05-24 21:57:32
#4       13088  12H 13M 45S 2017-05-30 08:44:03

解决方案:

library(lubridate)
df[df$Release.time - hms(strftime(df$DetectTime, format="%H:%M:%S")) >= "1H 30M",]

输出:

#  Squirrel.ID Release.time             DetectTime
#2       20948   10H 15M 8S    2017-06-05 08:09:48
#4       13088   12H 13M 45S   2017-05-30 08:44:03

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 2015-11-27
    • 2022-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多