2013-04-09 48 views
4

如何串日期时间转换中的R与小数秒

t <- c("00:00:0.00", "00:00:0.34") 

转换为数字? 尝试了几种方法 - 但他们没有工作..

+0

你可以转换为任意日期的第一或使用'lubridate' ... – Justin 2013-04-09 15:50:15

+0

如何转换为日期/数字实际上是我的问题.. – Kay 2013-04-09 16:09:31

回答

9

的基本思想是将您的字符串转换为有效POSIX*t对象,然后将其转换成一个numeric值:

## Set a couple of printing options 
options(digits = 12) 
options(digits.secs = 3) 

## Convert from character to POSIXlt to numeric 
(a <- strptime(t, format="%H:%M:%OS", tz="GMT")) 
# [1] "2013-04-09 00:00:00.00 GMT" "2013-04-09 00:00:00.34 GMT" 
(b <- as.numeric(a)) 
# [1] 1365465600.00 1365465600.34 

需要注意的是,当从数字转换回POSIX*t时,浮点问题可能会改变这些对象的打印方式。 (See here for more discussion of that issue.

## It _looks_ like you've lost 1/100 second on the second time object 
(c <- as.POSIXct(as.numeric(b), origin = "1970-01-01", tz="GMT")) 
# [1] "2013-04-09 00:00:00.00 GMT" "2013-04-09 00:00:00.33 GMT" 

## Here's a workaround for nicer printing. 
as.POSIXct(as.numeric(b+1e-6), origin = "1970-01-01", tz="GMT") 
# [1] "2013-04-09 00:00:00.00 GMT" "2013-04-09 00:00:00.34 GMT" 
+0

+1什么是对额外的括号的动机,如果你不介意我问? – 2013-04-09 18:02:57

+1

@MatthewPlourde - 它们只是强制打印一个对象的值,即使它已被分配给一个符号。 (比较'x < - rnorm(5)'和'(x < - rnorm(5))'我把它们放在那里b/c我通常希望我的答案是独立的并且可以通过复制并从SO进入R会议,虽然我可以看到他们有点分心;) – 2013-04-09 18:08:59

+0

根本没有批评。问,因为我期望学到一些东西......而且我做到了!谢谢。 – 2013-04-09 18:10:33