我有多个测量列表。在每个列表中将timestramp格式化为字符串(“2009-12-24 21:00:07.0”),我知道列表中的每个度量值相隔5秒。 我希望将所有数据合并到R中的巨大data.frame中。之后我希望能够轻松访问两个测量的时差,因此我可能应该将数据转换为不同于字符的数据。
我应该使用哪种格式存储时间?我应该使用某些包中的时间格式吗?
答案 0 :(得分:65)
你希望基础R中的(标准)POSIXt
类型可以以“紧凑形式”作为POSIXct
(它本质上是表示自纪元以来的小数秒的双重)或者长POSIXlt
中的表单(包含子元素)。很酷的是,算术等在此定义 - 请参阅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是一个非常通用且记录完备的矩阵容器,具有相关的日期/时间索引。