我正在使用R中的一些POSIXct
个对象,并且想知道如何控制答案的格式。
train$targetVar1 <- as.numeric(as.POSIXct(as.character(string1),tz="UTC") - as.POSIXct(as.character(string2),tz="UTC"))
答案似乎弹出为sec
,min
和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。
答案 0 :(得分:5)
POSIXct
和POSIXlt
个对象非常不同。您可以使用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.numeric
或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")
答案 1 :(得分:2)
您可以使用format
:
x <- as.POSIXlt("2012-12-12")
format(x, "%s")
[1] "1355266800"
参数"%s"
表示秒。