R / POSIX控制结果格式(秒,分钟,小时)

时间:2012-12-21 13:46:46

标签: r datetime posixct

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

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

答案似乎弹出为secminhr与数据无明显关系。

我查看使用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。

2 个答案:

答案 0 :(得分: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.numericunclass来获取这些秒:

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")

答案 1 :(得分:2)

您可以使用format

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

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

参数"%s"表示秒。