POSIXct的R中比较时间部(comparing time portion of POSIXct

2019-09-20 23:38发布

我有一个data.frame包含了一堆POSIXct日期:

df <- data.frame(dte=as.POSIXct(c("2001-02-03 14:30:00",
  "2001-02-04 9:30:00", "2001-02-05 10:30:00")), a=1:3)

我想提取的部分df具有时间部分大于9:15而小于5:25 PM。 我可以单独提取小时和分钟组件,写的比较,但我想可能有这样做的更优雅的方式。 任何人都可以提个建议吗?

我现在的方法是:

df <- subset(df,
  (as.numeric(format(dte, "%H")) >  9 & as.numeric(format(dte, "%M")) > 15) |
  (as.numeric(format(dte, "%H")) < 17 & as.numeric(format(dte, "%M")) < 25))

Answer 1:

我的建议是使用,而不是一个data.frame XTS。

df <- data.frame(dte=as.POSIXct(c("2001-02-03 14:30:00",
  "2001-02-04 9:30:00", "2001-02-05 10:30:00")), a=1:3)
library(xts)
x <- xts(df$a, df$dte)
x["T09:15/T17:25"]  # returns everything (in your example)
x["T10:15/T14:25"]  # returns the correct subset


文章来源: comparing time portion of POSIXct in R