2013-04-26 9 views
1

我的數據DATA有一個變量TIME,其值以這種格式打印出來:「11/14/2006 20:10」。對於時間,其模式是數字,其類是一個因素。在R中將變量轉換爲適當的日期時間格式的問題

我需要將TIME轉換爲適當的日期/時間變量(DTIME),並將新的DTIME添加到DATA作爲date.time。我被告知我可能不得不強制時間值,以便他們遵循h:m:s格式......認爲字符串操縱。下面是我的代碼:

library("chron") 

VAR=c(as.character(DATA$TIME)) 
DT<-t(as.data.frame(strsplit(VAR," "))) 
DT[1:3,] 
row.names(DT)<-NULL 
DT[1:3,] 
DTIME<-chron(dates=DT[,1],times=DT[,2], 
     format=c("m/d/y","h:m")) 

但是,一旦我運行的代碼的最後一行,我收到以下錯誤信息:

Error in convert.times(times., format = format[[2]]) : 
    format h:m may be incorrect 
In addition: Warning message: 
In is.na(out$s) : is.na() applied to non-(list or vector) of type 'NULL' 

我不明白這是什麼意思,更談不上如何解決它。

+0

似乎有'chron ::: parse.format'調用的'chron ::: convert.times'中的一個錯誤,其中格式'h:m'未被正確解析,而(比方說) 'h:m:s'* *正確解析。不知道在哪裏報告,但同時使用'as.chron'如下面答案中的建議似乎是一個很好的解決方法 – 2013-04-26 01:04:05

+0

這將是一個理想的功能,但它不是一個錯誤。它記錄在'?chron'中,時間格式必須是'h','m'和's'的排列。 – 2013-04-26 01:09:18

回答

3

它從問題不清楚你到底是什麼 - 在這種情況下,最好表現出適用於您的變量的dput輸出 - 但假設你可以將其轉換爲字符格式使用as.characterformat那麼它只是一個物質使用as.chron的:

> library(chron) 
> TIME <- "11/14/2006 20:10" 
> as.chron(TIME, "%m/%d/%Y %H:%M") 
[1] (11/14/06 20:10:00) 
1

使用lubridate - 這是一個夢幻般的圖書館,可以節省您很多的努力。

library(lubridate) 
x <- "11/14/2006 20:10" 
> mdy_hm(x) 
[1] "2006-11-14 20:10:00 UTC" 

所有lubridate的時間轉換功能遵循一個非常類似的模式:例如"2013-04-01"可以ymd解析等

+0

這似乎更容易。不幸的是,我被特別告知要使用chron軟件包。但我一定會用這個作爲我自己的參考! – 2013-04-26 00:56:44

1

您可以使用as.POSIXct字符串轉換成時間。

TIME <- "11/14/2006 20:10" 
as.POSIXct(TIME, format="%m/%d/%Y %H:%M", tz='GMT') 
## [1] "2006-11-14 20:10:00 GMT" 
+0

R告訴我POSIX軟件包「不可用(R版本2.15.3)」 – 2013-04-26 01:49:23

+0

您不需要任何軟件包。 as.POSIXct是一個基本功能。 – 2013-04-26 02:22:10

相關問題