2012-08-17 54 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