2017-07-14 73 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