2012-08-17 98 views
0

我有一個可以具有值這樣的數據幀:轉換時間POSIXct中的R

p<-c("2012-08-14 9:00", "2012-08-14 7:00:00") 

我試圖CONVER到日期時間爲這樣:

p<-as.POSIXct(p) 

this converted everyting to to 2012-08-14 09:00:00 

出於某種原因,它不再工作了。如果您已經注意到,我的數據有時會有幾秒鐘,而有時則不會。 你如何強制這是日期時間格式?

我得到的錯誤是這樣的:

Error in as.POSIXlt.character(p) : 
    character string is not in a standard unambiguous format 
+0

看看'strptime'的論點,但你需要包括像'as.POSIXct(p,format ='%Y-%m-%d%H:%M')' – Justin 2012-08-17 17:51:42

+0

@justin,這也不起作用:as.POSIXct(p,format ='%Y - %m-%d%H:%M' – user1471980 2012-08-17 17:53:59

+0

它究竟是如何工作的?這對你使用的'p'向量非常有用,請發表你的錯誤。你還可以使用'dput p)'所以我們可以看到整件事情,我假設你是哈有多種不同格式的日期,需要進行一些修復。 – Justin 2012-08-17 18:01:58

回答

3

您的載體是不是一致的格式,所以它轉換成POSIXlt首先是因爲as.POSIXlt.character檢查多種格式。

p <- c("2012-08-14 9:00", "2012-08-14 7:00:00") 
plt <- as.POSIXlt(p) 
pct <- as.POSIXct(plt) 
+0

+1這就是光滑的......我總是將時間戳字符串重新定義,直到'POSIXct'將採取時間戳。 – Justin 2012-08-17 18:27:22

0

包lubridate可以幫助
這裏的例子 - 也許不是最優雅的一個 - 但它HS

p<-c("2012-08-14 9:00", "2012-08-14 7:00:00") 

require(lubridate) # 


NewDate <- c() 
for (i in 1 : 2) 
     { 
      if (nchar(unlist(strsplit(p[i], ' '))[2]) == 4) {NewDate <- c(NewDate,  as.character(ymd_hm(p[i])))} 
      if (nchar(unlist(strsplit(p[i], ' '))[2]) == 7) {NewDate <- c(NewDate, as.character(ymd_hms(p[i])))} 
     } 
NewDate