2012-02-13 87 views
1

我有一個時間序列的日期時間字段的問題:日期時間AM/PM中的R

> CO1temp[163:169,] 
        Date OPEN HIGH LOW  CLOSE 
163 7/11/2011 11:45:00 PM 116.30 116.30 116.09  116.18   
164 7/11/2011 11:50:00 PM 116.16 116.78 116.13  116.70  
165 7/11/2011 11:55:00 PM 116.69 116.83 116.51  116.65  
166    7/12/2011 116.65 116.79 116.44  116.50   
167 7/12/2011 12:05:00 AM 116.50 116.60 116.39  116.47   
168 7/12/2011 12:10:00 AM 116.49 116.55 116.38  116.52   
169 7/12/2011 12:15:00 AM 116.52 116.67 116.39  116.44  

正如你可以看到午夜的時間(166)沒有正常顯示。 當我創建我的XTS對象,它創建了一個NA:

CO1 <- as.xts(CO1temp[, 2:5], order.by = as.POSIXct(CO1temp[,1],format='%m/%d/%Y %r'),frequency="5 minutes") 
> CO1[163:169,] 
         OPEN HIGH LOW  CLOSE 
2011-07-11 23:45:00 116.30 116.30 116.09  116.18 
2011-07-11 23:50:00 116.16 116.78 116.13  116.70 
2011-07-11 23:55:00 116.69 116.83 116.51  116.65 
<NA>    116.65 116.79 116.44  116.50 
2011-07-12 00:05:00 116.50 116.60 116.39  116.47 
2011-07-12 00:10:00 116.49 116.55 116.38  116.52 
2011-07-12 00:15:00 116.52 116.67 116.39  116.44 

這後來導致更多的問題時,我想分析這個時間序列。 ?strptime非常具體: 如果任何組件的時間分量不是午夜,格式方法的缺省值爲「%Y-%m-%d%H:%M:%S」,並且「%Y-% Y-%m-%d「。

但是我的日期時間不是標準格式。

我將不勝感激任何幫助。

+2

有些人可能知道如何創建這樣一個對象,但它會幫助我們其他人,如果你將發佈'dput(CO1temp [163:169,])的結果' – 2012-02-13 00:57:44

回答

0

這是一種黑客,但它的工作原理。
您只需在日期向量中添加「12:00:00 AM」:那些缺少小時信息的將被正確讀取,並且在已經有小時信息的日期,它將被忽略已經存在的那個將被讀取。

CO1 <- as.xts(CO1temp[, 2:5], 
       order.by = as.POSIXct(paste(CO1temp$Date,"12:00:00 AM", sep=" "), 
            format='%m/%d/%Y %r'), 
       frequency="5 minutes") 
CO1 
         OPEN HIGH LOW CLOSE 
2011-07-11 23:45:00 116.30 116.30 116.09 116.18 
2011-07-11 23:50:00 116.16 116.78 116.13 116.70 
2011-07-11 23:55:00 116.69 116.83 116.51 116.65 
2011-07-12 00:00:00 116.65 116.79 116.44 116.50 
2011-07-12 00:05:00 116.50 116.60 116.39 116.47 
2011-07-12 00:10:00 116.49 116.55 116.38 116.52 
2011-07-12 00:15:00 116.52 116.67 116.39 116.44 

話雖這麼說,如果你結束了你的數據幀,因爲它是使用strptime後,那麼你的日期列已經在POSIXct格式,因此以下應直接工作:

as.xts(CO1temp[, 2:5], order.by = CO1temp$Date, frequency = "5 minutes")