2013-03-02 23 views
2

我有限定的data.frame earlyCloses如下:XTS分配改變柱類

earlyCloses <- read.table('EarlyCloses.txt', header=T, colClasses= c(rep("character", 3))) 
earlyCloses 

    StartDate EndDate EarlyClose 
1 2012-12-24 2012-12-24  13:00 

我限定XTS對象pricesXts如下:

prices <- read.table('sample.txt', header=T, colClasses=c("character", "numeric")) 
pricesXts = xts(prices$Close, as.POSIXct(prices$Date, tz='America/New_York')) 
colnames(pricesXts) = c("Close") 
pricesXts$CloseTime = NA 
pricesXts 

       Close CloseTime 
2012-12-21 13190.84  NA 
2012-12-24 13139.08  NA 
2012-12-26 13114.59  NA 
2012-12-27 13096.31  NA 
2012-12-28 12938.11  NA 

現在我在執行一個循環EarlyCloses行並設置價格Xts的CloseTime。

for (i in 1:nrow(earlyCloses)) { 
    pricesXts[paste(earlyCloses[i,"StartDate"], earlyCloses[i,"EndDate"], sep='/'), 2] = earlyCloses[i,"EarlyClose"] 
} 
pricesXts 

      Close  CloseTime 
2012-12-21 "13190.84" NA  
2012-12-24 "13139.08" "13:00" 
2012-12-26 "13114.59" NA  
2012-12-27 "13096.31" NA  
2012-12-28 "12938.11" NA  

爲什麼xts對象中的Close列的類從數字更改爲字符?這是因爲xts對象在內部表示爲矩陣嗎?有沒有辦法避免這種轉換?

+0

看功能'xts',它似乎是這樣的(' matrix')。 – Arun 2013-03-02 21:53:12

回答

2

xts在內部編碼爲矩陣(性能更好)。因爲你只想保存早期關閉,你可以將其轉換爲數字,例如:

strptime(earlyCloses$EarlyClose,'%H:%M')$hour 

然後

for (i in 1:nrow(earlyCloses)) 
    pricesXts[paste(earlyCloses[i,"StartDate"], 
        earlyCloses[i,"EndDate"], 
        sep='/'), 2] <- strptime(earlyCloses$EarlyClose,'%H:%M')$hour 


      Close CloseTime 
2012-12-21 13191  NA 
2012-12-24 13139  13 
2012-12-26 13115  NA 
2012-12-27 13096  NA 
2012-12-28 12938  NA