【发布时间】:2010-12-30 01:20:26
【问题描述】:
我有多个测量值列表。在每个列表中,时间戳都被格式化为一个字符串(“2009-12-24 21:00:07.0”),我知道列表中的每个测量都间隔 5 秒。 我想在 R 中将所有数据合并到一个巨大的 data.frame 中。之后我希望能够轻松访问两次测量的时间差,所以我可能应该将数据转换为不同于字符的东西。
我应该使用哪种格式来存储时间?我应该使用某些包中的某些时间格式吗?
【问题讨论】:
我有多个测量值列表。在每个列表中,时间戳都被格式化为一个字符串(“2009-12-24 21:00:07.0”),我知道列表中的每个测量都间隔 5 秒。 我想在 R 中将所有数据合并到一个巨大的 data.frame 中。之后我希望能够轻松访问两次测量的时间差,所以我可能应该将数据转换为不同于字符的东西。
我应该使用哪种格式来存储时间?我应该使用某些包中的某些时间格式吗?
【问题讨论】:
您想要来自基本 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 是一个极其通用且记录良好的矩阵容器,带有相关的日期/时间索引。
【讨论】:
help.search("date time") 会发现相邻的函数。