2011-05-20 50 views
1

我有1分鐘的盤中價格數據,其中缺少數據點。因此我想填補它們。在xts股票價格對象中填充缺失數據

通過我的建議在以下崗位閱讀並嘗試過類似的過程: R: Filling missing dates in a time series?

在我的情況下丟失的數據點是第一筆交易,即在9時31分00秒。

> head(s) 
        AMR.Open AMR.High AMR.Low AMR.Close AMR.Volume AMR.WAP AMR.hasGaps AMR.Count 
2010-09-10 09:32:00  6.08  6.10 6.07  6.10  298 6.087   0  39 
2010-09-10 09:33:00  6.10  6.14 6.10  6.14  274 6.122   0  70 
2010-09-10 09:34:00  6.14  6.15 6.13  6.13  472 6.133   0  96 
2010-09-10 09:35:00  6.13  6.14 6.13  6.13  291 6.133   0  68 
2010-09-10 09:36:00  6.13  6.13 6.11  6.11  548 6.123   0  97 
2010-09-10 09:37:00  6.11  6.11 6.11  6.11   67 6.110   0  26 

> na.locf(s, xout=seq(as.POSIXct(head(index(s), 1) - 60), as.POSIXct(tail(index(s), 1)), by="1 min")) -> ss 

> head(ss) 
        AMR.Open AMR.High AMR.Low AMR.Close AMR.Volume AMR.WAP AMR.hasGaps AMR.Count 
2010-09-10 09:32:00  6.08  6.10 6.07  6.10  298 6.087   0  39 
2010-09-10 09:33:00  6.10  6.14 6.10  6.14  274 6.122   0  70 
2010-09-10 09:34:00  6.14  6.15 6.13  6.13  472 6.133   0  96 
2010-09-10 09:35:00  6.13  6.14 6.13  6.13  291 6.133   0  68 
2010-09-10 09:36:00  6.13  6.13 6.11  6.11  548 6.123   0  97 
2010-09-10 09:37:00  6.11  6.11 6.11  6.11   67 6.110   0  26 

正如您在上面所看到的,返回的對象未按需要填充。

下面您可以看到我正確指定了開始和結束時間。

> as.POSIXct(head(index(s), 1) - 60) 
[1] "2010-09-10 09:31:00 EDT" 

> as.POSIXct(tail(index(s), 1)) 
[1] "2010-09-10 16:00:00 EDT" 
> 

難道這是因爲日期範圍有一個指定的時區而原始的POSIX索引沒有?我試圖通過指定tz =「」來刪除tz,但不會將其刪除。話雖如此,時區可能只是一個紅鯡魚。

我保存的數據的RDA(二進制)格式,如果有人有興趣測試:

http://www.speedyshare.com/files/28576853/test.rda

欣賞的幫助。

+0

我真的不那麼確定你所要求的在這裏......我下載您的數據並查看索引,並且每隔一段時間就有一次。 'AMR'列爲389個值,'attr(,「index」)爲389。我看到沒有缺失的數據點。現在,這個「在9:31失蹤的第一點」,你有數據嗎?我的意思是,你所要做的就是將索引和屬性索引移動一位,並填寫第一位索引。如果是這樣的話,我可以幫你解決問題。否則,我真的不明白你的問題是什麼.... – msikd65 2011-05-22 06:35:22

+0

嗨msikd65 - 謝謝你的迴應。缺失的數據是在9:31發生的數據。由於當時我沒有數據,所以我想複製9:32時存在的數據並將它插入到9:31時隙中。通過這種方式,我可以使時間序列與每隔一個非半天交易日和股票價格保持一致。我想執行需要常規時間序列的各種分析。感謝幫助。 – codingknob 2011-05-22 17:07:58

+0

你的數據是什麼形式?我不是很熟悉這個.rda我假設存在一個數據框(可能叫做's'?)和所有的AMR數據? – msikd65 2011-05-22 17:24:39

回答

2

na.locf對數據進行操作,而不是索引。如果你想的NA行添加到數據,你需要做一個合適的XTS反對rbinds

miss <- xts(matrix(1*NA,1,NCOL(s)), first(index(s))-60) 
s <- rbind(miss,s) 
s <- na.locf(s, fromLast=TRUE) 
+1

這正是我需要的。謝謝。我也只是想通過以下方法也可以: 「s < - merge(s,timeBasedSeq(paste(start(s),end(s),」M「,sep =」/「)))」 以下「s < - na.locf(s)」 – codingknob 2011-05-30 17:06:13