我有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
欣賞的幫助。
我真的不那麼確定你所要求的在這裏......我下載您的數據並查看索引,並且每隔一段時間就有一次。 'AMR'列爲389個值,'attr(,「index」)爲389。我看到沒有缺失的數據點。現在,這個「在9:31失蹤的第一點」,你有數據嗎?我的意思是,你所要做的就是將索引和屬性索引移動一位,並填寫第一位索引。如果是這樣的話,我可以幫你解決問題。否則,我真的不明白你的問題是什麼.... – msikd65 2011-05-22 06:35:22
嗨msikd65 - 謝謝你的迴應。缺失的數據是在9:31發生的數據。由於當時我沒有數據,所以我想複製9:32時存在的數據並將它插入到9:31時隙中。通過這種方式,我可以使時間序列與每隔一個非半天交易日和股票價格保持一致。我想執行需要常規時間序列的各種分析。感謝幫助。 – codingknob 2011-05-22 17:07:58
你的數據是什麼形式?我不是很熟悉這個.rda我假設存在一個數據框(可能叫做's'?)和所有的AMR數據? – msikd65 2011-05-22 17:24:39