1

我正在使用POSIXctR 中的一些对象,并且想知道如何控制答案的格式。

train$targetVar1 <- as.numeric(as.POSIXct(as.character(string1),tz="UTC") - as.POSIXct(as.character(string2),tz="UTC"))

答案似乎弹出为secmin并且hr与数据没有明显关系。

我看着使用POSIXlt帮助文件使它听起来像lt对象为每个时间尺度创建一个向量,但无法弄清楚如何使用各种方法访问向量,例如:

> posixObj1 <- as.POSIXlt("2012-12-12 12:00:00")
> posixObj1$sec
[1] 0
> posixObj1$min
[1] 0
> posixObj1$hour
[1] 12

> x <- as.POSIXlt("2012-12-12")
> x
[1] "2012-12-12"
> format(x, "%s")
[1] ""

有什么建议么?

注意:我在 Windows 7 机器上运行 R 2.15.1。

4

2 回答 2

5

POSIXctPOSIXlt对象是非常不同的。您可以使用以下命令查看dput

dput(Sys.time())
structure(1356100378.30553, class = c("POSIXct", "POSIXt"))

dput(as.POSIXlt(Sys.time()))
structure(list(sec = 13.2815599441528, min = 33L, hour = 14L, 
    mday = 21L, mon = 11L, year = 112L, wday = 5L, yday = 355L, 
    isdst = 0L), .Names = c("sec", "min", "hour", "mday", "mon", 
"year", "wday", "yday", "isdst"), class = c("POSIXlt", "POSIXt"
), tzone = c("", "GMT", "BST"))

POSIXct是记录自 UNIX 纪元以来的秒数,您可以使用as.numericor获得这些秒数unclass

as.numeric(Sys.time())
[1] 1356100510
unclass(Sys.time())
[1] 1356100516

请注意,结果的差异是由于我需要 6 秒来调用第二个命令。

至于你原来的问题,-.POSIXt最终调用difftime默认units参数为auto. 这意味着输出单位将取决于差异的大小。要获得一致性,请difftime直接调用:

difftime(as.POSIXct(as.character(string1),tz="UTC"), as.POSIXct(as.character(string2),tz="UTC")), units="secs")
于 2012-12-21T14:36:28.630 回答
2

你可以使用format

x <- as.POSIXlt("2012-12-12")

format(x, "%s")    
[1] "1355266800"

该参数"%s"表示秒。

于 2012-12-21T14:16:20.627 回答