在R中处理时间戳

在R中处理时间戳,r,time,timestamp,R,Time,Timestamp,我有多个测量列表。在每个列表中,TimeStrmp的格式都是字符串(“2009-12-24 21:00:07.0”),我知道列表中的每个度量值之间的间隔是5秒。 我想把所有的数据合并成一个巨大的R.data.frame,然后我想能够很容易地获得两个测量值的时间差,所以我可能应该把数据转换成不同于字符的东西 我应该使用哪种格式来存储时间?在我应该使用的包中是否有一些时间格式?您需要来自base R的(标准)POSIXt类型,它可以以“紧凑形式”作为POSIXct(本质上是一个双精度,表示自纪元以来

我有多个测量列表。在每个列表中,TimeStrmp的格式都是字符串(“2009-12-24 21:00:07.0”),我知道列表中的每个度量值之间的间隔是5秒。 我想把所有的数据合并成一个巨大的R.data.frame,然后我想能够很容易地获得两个测量值的时间差,所以我可能应该把数据转换成不同于字符的东西

我应该使用哪种格式来存储时间?在我应该使用的包中是否有一些时间格式?

您需要来自base 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> 

最后,是一个功能极其丰富、文档记录良好的矩阵容器,包含相关的日期/时间索引。

谢谢。为R函数命名的人是残忍的。我的意思是你怎么猜POSIXlt与时间有关?但是
help.search(“date-time”)
会发现邻近的函数。@DirkEddelbuettel是的,这很有帮助。无论如何,这不是不好的命名的借口。代码在不需要文档的情况下可读性越强越好。
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>