1

我有一个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 的部分。我可以分别提取小时和分钟的组成部分并进行比较,但我认为可能有一种更优雅的方法。任何人都可以提出建议吗?

我目前的方法是:

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

1 回答 1

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
于 2012-08-07T20:24:58.953 回答