2017-07-14 74 views
0

我正在研究一个项目,需要从POSIXct对象获取确切的第二个项目。例如,如果打印出一个名为tm一个POSIXct对象:如何从R中的POSIXct对象中提取浮点数?

> tm 
[1] "2017-07-10 09:03:32.26876 BRT" 
> class(tm) 
[1] "POSIXct" "POSIXt" 

如果我运行:

> format(tm, "%S") 
[1] "32" 

只打印出小数,而不是我想要的“32.26876”,我该怎么办呢?我在这里先向您的帮助表示感谢。

回答

3

?strftime以下注意:

具体到R为%OSn,这对于输出给秒 截断为0 <= n <= 6小数位(如果%OS不 后跟数字,它使用的设置为 getOption("digits.secs"),或者如果未设置,则为n = 0)。

因此,我们可以恢复多达6位小数,虽然似乎有在这个信息的一些变化:

> tm <- as.POSIXct("2017-07-10 09:03:32.26876", tz = "BRT") 
> tm 
[1] "2017-07-10 09:03:32.268 BRT" 
> format(tm, "%OS5") 
[1] "32.26875" 
> format(tm, "%OS6") 
[1] "32.268759" 
3

可以使用%OS参数提取分数秒:

tm <- as.POSIXct("2017-07-10 09:03:32.26876 BRT", format="%Y-%m-%d %H:%M:%OS") 
class(tm) 
# [1] "POSIXct" "POSIXt" 

# set the second digits option 
options(digits.secs=5) 

# `strftime` or `format`: 

strftime(tm, "%OS") 
#[1] "32.26875" 

format(tm, "%OS") 
#[1] "32.26875" 
1

如果你将其转换为POSIXlt,这很容易。

tm = as.POSIXct("2017-07-10 09:03:32.26876 BRT") 
as.POSIXlt(tm)$sec 
[1] 32.26876