【问题标题】:Dealing with timestamps in R在 R 中处理时间戳
【发布时间】:2010-12-30 01:20:26
【问题描述】:

我有多个测量值列表。在每个列表中,时间戳都被格式化为一个字符串(“2009-12-24 21:00:07.0”),我知道列表中的每个测量都间隔 5 秒。 我想在 R 中将所有数据合并到一个巨大的 data.frame 中。之后我希望能够轻松访问两次测量的时间差,所以我可能应该将数据转换为不同于字符的东西。

我应该使用哪种格式来存储时间?我应该使用某些包中的某些时间格式吗?

【问题讨论】:

    标签: r time timestamp


    【解决方案1】:

    您想要来自基本 R 的(标准)POSIXt 类型,它可以以“紧凑形式”作为 POSIXct(本质上是一个双精度表示自纪元以来的小数秒)或 @987654324 中的长形式@(包含子元素)。很酷的是,算术等是在此定义的——见help(DateTimeClasses)

    快速示例:

    R> now <- Sys.time()
    R> now
    [1] "2009-12-25 18:39:11 CST"
    R> as.numeric(now)
    [1] 1.262e+09
    R> now + 10  # adds 10 seconds
    [1] "2009-12-25 18:39:21 CST"
    R> as.POSIXlt(now)
    [1] "2009-12-25 18:39:11 CST"
    R> str(as.POSIXlt(now))
     POSIXlt[1:9], format: "2009-12-25 18:39:11"
    R> unclass(as.POSIXlt(now))
    $sec
    [1] 11.79
    
    $min
    [1] 39
    
    $hour
    [1] 18
    
    $mday
    [1] 25
    
    $mon
    [1] 11
    
    $year
    [1] 109
    
    $wday
    [1] 5
    
    $yday
    [1] 358
    
    $isdst
    [1] 0
    
    attr(,"tzone")
    [1] "America/Chicago" "CST"             "CDT"            
    R> 
    

    至于阅读,见help(strptime)

    至于区别,也很简单:

    R> Jan1 <- strptime("2009-01-01 00:00:00", "%Y-%m-%d %H:%M:%S")
    R> difftime(now, Jan1, unit="week")
    Time difference of 51.25 weeks
    R> 
    

    最后,zoo package 是一个极其通用且记录良好的矩阵容器,带有相关的日期/时间索引。

    【讨论】:

    • 谢谢。为 R 函数命名的人很残忍。我的意思是你应该怎么猜POSIXlt与时间有关系?
    • 但是help.search("date time") 会发现相邻的函数。
    • @DirkEddelbuettel 是的,这很有帮助。无论如何,这不是糟糕命名的借口。不需要文档的代码越可读越好。
    猜你喜欢
    • 2021-01-17
    • 2016-07-11
    • 2020-05-11
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多