【问题标题】:comparing time portion of POSIXct in R比较 R 中 POSIXct 的时间部分
【发布时间】:2012-08-04 21:56:20
【问题描述】:

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

【问题讨论】:

    标签: r date datetime posix posixct


    【解决方案1】:

    我的建议是使用 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
    

    【讨论】:

    • 我目前使用zoo 处理我所有的时间序列资料。你能建议为什么切换到xts 会有用吗?我阅读了文档,但它非常抽象
    • 仅子集就值得切换。 Zoo 是通用的(“有序观察”),xts 与金融数据类固醇的想法相同。
    • 很好,谢谢!我将深入研究 xts 文档,因为我对它不是很熟悉。它让我想起了你们 cmets 的data.table
    • @Alex: data.table 更像是一个data.frame。 xts 对象就像动物园对象(具有索引属性的矩阵)。 xts 它使您可以很容易地完成您在问题中提出的问题。它还针对大型数据集的速度进行了优化(例如,合并两个数百万个观测值的序列需要
    • 我能问一下你是怎么知道把东西写成“T09:15”的吗?你会碰巧有一个参考我可以看看还是在xts 文档中?我看到你可以用这种方式对事物进行子集化,但你怎么知道把 T 放在时间前面?
    猜你喜欢
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 2012-07-22
    • 1970-01-01
    相关资源
    最近更新 更多