2017-05-28 74 views
0

我從雅虎(下面的代碼)下載了股票市場數據 - 對於上下文,起初我嘗試了getSymbols(^DJI),但我收到了與雅虎有關的錯誤消息......不同的問題。R中的時間序列中的子設置時間

的一點是,一旦下載,導入R,I按摩它到足夠接近的時間序列的格式,以能夠運行chartSeries(DJI)

require(RCurl) 
require(foreign) 
x <- getURL("https://raw.githubusercontent.com/RInterested/datasets/gh-pages/%5EDJI.csv") 
DJI <- read.csv(text = x, sep =",") 
DJI$Date <- as.Date(DJI$Date, format = "%m/%d/%Y") # Formatting Date as.Date 
rownames(DJI) <- DJI$Date       # Assigning Date to row names 
DJI$Date <- NULL         # Removing the Date column 
chartSeries(DJI, type="auto", theme=chartTheme('white')) 

enter image description here

即使數據集不是一個真正的時間序列:

> is.ts(DJI) 
[1] FALSE 

問題出現時,我試圖找出日期,例如最小的clo唱出道指的價值。我可以這樣做

> DJI[DJI$Close == min(DJI$Close),] 
       Open High  Low Close Adj.Close Volume 
1985-05-01 1257.18 1262.81 1239.07 1242.05 1242.05 10050000 

產生整個行,包括行名稱(1985-05-01),這是我想要的只是一部分。不過,如果我堅持剛開的實際日期,我必須兼顧包含日期,第二個數據集的一列:

require(RCurl) 
require(foreign) 
x <- getURL("https://raw.githubusercontent.com/RInterested/datasets/gh-pages/%5EDJI.csv") 
DJI <- read.csv(text = x, sep =",") 

DJI$Date <- as.Date(DJI$Date, format = "%m/%d/%Y") # Formatting Date as.Date 
rownames(DJI) <- DJI$Date   # Assigning Date to row names 
DJI.raw <- DJI      # Second dataset for future subsetting 
DJI$Date <- NULL     # Removing the Date column 

這確實讓我跑

> DJI.raw$Date[DJI.raw$Close == min(DJI.raw$Close)] 
[1] "1985-05-01" 

此外,我不認爲將數據集轉換爲.xts文件會有所幫助。

+0

請注意,當您將日期分配給rownames時,它們會變回字符。這就是說,如果你不想在data.frame中包含日期的另一列,並且日期是字符,那麼你可以簡單地使用'rownames(DJI)[DJI $ Close == min(DJI $關閉)]' – digEmAll

+0

@digEmAll我假設一個時間序列需要行名稱作爲日期。這不正確嗎?另外,如果我將日期列保留在數據集內,則無法運行'chartSeries()'... – Toni

+1

是的,這是可能的(我不知道chartSeries函數),但這並不意味着您不能擁有在data.frame anyaway中將一列列傳遞給chartSeries ...例如'chartSeries(DJI [, - 1],type =「auto」,theme = chartTheme('white'))'(-1表示我們沒有將位置1的列傳遞給chartSeries,當然如果Date列在位置2,你應該通過-2等等......) – digEmAll

回答

0

我不清楚你想要什麼,但它聽起來像你只是想約會?你提到XTS是不是一種選擇(這將是可運行的)

time(as.xts(DJI))[which.min(DJI$Close)] # POSIXct format 
# [1] "1985-05-01 EDT" 

否則簡單rownames + which.min將獲得日期嗎?

as.Date(rownames(DJI)[which.min(DJI$Close)]) # Date format 
# [1] "1985-05-01" 
+0

我對時間序列不熟悉,但有兩個想法是相互矛盾的,可能都是錯誤的:1.做一個rownames R中的ts需要是日期嗎? 2.如果我使用'as.xts()'轉換爲ts,則rownames將被刪除並默認爲矩陣格式。 – Toni

+0

創建ts對象時,日期的頻率是常規的。使用ts()創建ts對象具有開始日期,結束日期和頻率(1 =年度,4 = qrtrly,12 =每月等)的參數。 Xts對象的工作方式不同,它們根本不假定常規頻率,並且只需將值符合日期時隙。 –