2012-12-23 61 views
2

我一直在試圖獲取關於如何使用本地文件來創建candlecharts的信息,但其中大多數是指yahoo和google文件。在CSV文件中使用Quantmod

我有一個CSV文件

i<-"A" 
library(quantmod) 
A<-read.csv("D:\\DATA.csv",header=T) 
     A$Close<-as.numeric(A$Close) 
     A$High<-as.numeric(A$High) 
     A$Low<-as.numeric(A$Low) 
     A$Open<-as.numeric(A$Open) 
     A$Volume<-as.numeric(A$Volume) 

     #Select appropriate dataset 
     A<-A[which(A$CODE==i),] 
     A<-A[,(5:10)] 
     A$DATE<-as.Date(A$DATE,"%Y/%d/%Y") 
     A<-xts(A,order.by=as.POSIXct(A$DATE)) 
     A<-A[,(1:5)] 

我的原始數據集如下:

head(A) 
     CODE NAME YR2 YR2 Low High Close Open Volume DATE 
49620 A A 10.25  21 112 120 116  101,500 9/11/2006 
49621 A A 10.25  21 112 120 118 116 790,700 9/12/2006 
49622 A A 10.25  21 117 124 119 118 445,300 9/13/2006 
49623 A A 10.25  21 119 127 123 119 120,200 9/14/2006 
49624 A A 10.25  21 120 127 124 123 448,700 9/15/2006 
49625 A A 10.25  21 120 130 128 124 494,600 9/18/2006 
##NOTE THAT THE FIRST COLUMNS DOES NOT HAVE A NAME(IT IS THE OBS NO.) 

上述運行後命令數據集是如下所示。

head(A) 
        Low High Close Open Volume 
2006-12-01 03:00:00 " 206" " 231" " 228" " 232" "1159" 
2006-12-01 03:00:00 " 204" " 230" " 206" " 229" "5711" 
2006-12-02 03:00:00 " 259" " 261" " 259" " 260" "1072" 
2006-12-02 03:00:00 " 200" " 229" " 207" " 229" "1505" 
2006-12-03 03:00:00 " 262" " 264" " 262" " 260" "5416" 
2006-12-03 03:00:00 " 204" " 227" " 206" " 208" " 676" 

我然後創建修改colnames到所需的格式 所有修改後我的數據集是如下所示。

    A.Low A.High A.Close A.Open A.Volume 
2006-12-01 03:00:00 " 206" " 231" " 228" " 232" "1159" 
2006-12-01 03:00:00 " 204" " 230" " 206" " 229" "5711" 
2006-12-02 03:00:00 " 259" " 261" " 259" " 260" "1072" 
2006-12-02 03:00:00 " 200" " 229" " 207" " 229" "1505" 
2006-12-03 03:00:00 " 262" " 264" " 262" " 260" "5416" 
2006-12-03 03:00:00 " 204" " 227" " 206" " 208" " 676" 

我在這裏停留,因爲當我將它保存的數據集完全改變,這樣當我嘗試讀取它,我得到:

Index.A.Low.A.High.A.Close.A.Open.A.Volume 
1 2006-12-01 03:00:00 206 231 228 232 1159 
2 2006-12-01 03:00:00 204 230 206 229 5711 
3 2006-12-02 03:00:00 259 261 259 260 1072 
4 2006-12-02 03:00:00 200 229 207 229 1505 
5 2006-12-03 03:00:00 262 264 262 260 5416 
6 2006-12-03 03:00:00 204 227 206 208 676 

我的問題是:

  1. 日期是不是原始數據集中的日期
  2. 我無法得到我需要做的事(繪製燭臺)
+0

歡迎StackOverflow上,我們可以幫你這個問題,但首先你應該幫助請閱讀[本文](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)解釋如何通過提供可重現性來提出一個好問題例如,爲什麼不通過在你的R終端中輸入'?dput'來查看'dput'函數來開始。注意你上面給出的示例數據是不正確的:頭部有6個字段,但是da ta只有5個字段。使用'dput'可以減少這些錯誤。 – SlowLearner

+0

...並正確地格式化您的問題,避免使用HTML標籤... –

回答

0

我同意SlowLearner關於要求更可重複的示例。
一對夫婦的意見,但:

  1. 您可以轉換使用order.by = as.Date本身XTS。
  2. 檢查as.Date中的格式。如果你的數據是mm/dd/yyyy(從問題中的數據看來,那麼該命令應該具有format ='%m /%d /%Y'而不是'%Y /%d /%Y'。

另外,請確保您的數據是逗號分隔的,而不是製表符分隔(已經下滑了我很多次)。