比较R中POSIXct的时间部分

时间:2012-08-07 20:22:02

标签: r date datetime posix posixct

我有一个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)

我想提取时间部分大于上午9:15且不到下午5:25的df部分。我可以分别提取小时和分钟的组件并写一个比较,但我认为可能有一种更优雅的方式。有人可以提出建议吗?

我目前的方法是:

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))

1 个答案:

答案 0 :(得分:2)

我的建议是使用xts而不是data.frame。

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