2016-08-16 24 views
0

毎日と毎週のデータを連続してバインドしたい(NAなし)このコードをその目的に使用していますが、2つの問題があります。連続した毎日および毎週のデータをR?

library(quantmod) 
aapl=getSymbols("AAPL",from="2015-01-01",auto.assign=F) 
d_aapl=Cl(aapl)/Op(aapl) 
head(d_aapl) 
w_aapl=to.weekly(d_aapl) 

head(w_aapl) 
res=cbind(d_aapl,Cl(w_aapl)) 
head(res,8) 

最初の問題は、論理的にそれだけでのみd_aapl変数にto.weekly機能を実行する必要がありw_aapl=to.weekly(d_aapl)であるが、その量は、調整近い以外のすべての列にそれを行います。ここで何が起きてるの?

  d_aapl.Open d_aapl.High d_aapl.Low d_aapl.Close 
2015-01-02 0.9815064 0.9815064 0.9815064 0.9815064 
2015-01-09 0.9811617 1.0243522 0.9811617 0.9941422 
2015-01-16 0.9702487 1.0069699 0.9702487 0.9902831 
2015-01-23 1.0081603 1.0194087 1.0055072 1.0060552 
2015-01-30 0.9943731 1.0221802 0.9708237 0.9895270 
2015-02-06 1.0049131 1.0089451 0.9909182 0.9909182 

第2の問題は、出力がresであることです。カラムは、私が期待結合後の日のいくつかは、NAが移入されますが、代わりにNAの私はそれを行うにはどのように以前のデータ

curren result 
      AAPL.Close d_aapl.Close 
2015-01-02 0.9815064 0.9815064 
2015-01-05 0.9811617   NA 
2015-01-06 0.9973719   NA 
2015-01-07 1.0051306   NA 
2015-01-08 1.0243522   NA 
2015-01-09 0.9941422 0.9941422 
2015-01-12 0.9702487   NA 
2015-01-13 0.9891412   NA 

wanted 

      AAPL.Close d_aapl.Close 
2015-01-02 0.9815064 0.9815064 
2015-01-05 0.9811617 0.9815064 
2015-01-06 0.9973719 0.9815064 
2015-01-07 1.0051306 0.9815064 
2015-01-08 1.0243522 0.9815064 
2015-01-09 0.9941422 0.9941422 
2015-01-12 0.9702487 0.9941422 
2015-01-13 0.9891412 0.9941422 

を使いたいですか?

+2

使用 '動物園:: na.locfを() 'または' tidyr :: fill() 'を呼び出して2番目の問題を解決してください。 – Psidom

+1

最初の問題のOHLC引数を設定します: 'to.weekly(d_aapl、OHLC = FALSE)'。 '?to.weekly'を参照してください。 –

答えて

1

あなたは何が起こっているかを尋ねられたあなたの最初の問題への実際の答えは、:w_aapl=to.weekly(d_aapl)は単にあなたの毎日のd_aapl時系列のOHLCを(返却されます一変量シリーズ)を週単位で使用していますが、週単位のデータの最初の数行(および最後の数個)はあまり明確ではありません。 (それはあなたの質問の文脈で調節された価格またはボリュームを持つには何もありません。)w_aapl

タイムスタンプは、あなたがしたい場合(約?to.periodindexAt引数を読んで、デフォルトでは毎週の集計で使用可能な最後の日に対応しますタイムスタンプを週の開始に変更しますが、これはあなたの質問に答えるための側面です)、毎週月曜日から日曜日まで実行されます(月のデータは来週の最初の日です)。

週末のデータがないため、タイムスタンプは毎週金曜日になります(日曜日のデータが含まれていれば日曜日になります)。多分これは何が起こっているか見に役立ちます。

class(coredata(d_aapl)) <- "character" 
v <- xts(order.by = index(d_aapl), x = weekdays(index(d_aapl)), dimnames = list(NULL, "Weekday")) 
head(merge(d_aapl, v), 20) 

#    AAPL.Close   Weekday  
# 2015-01-02 "0.981506445654964" "Friday" 
# 2015-01-05 "0.981161686386908" "Monday" 
# 2015-01-06 "0.997371888517253" "Tuesday" 
# 2015-01-07 "1.00513062514358" "Wednesday" 
# 2015-01-08 "1.02435224688221" "Thursday" 
# 2015-01-09 "0.994142220540378" "Friday" 
# 2015-01-12 "0.970248685084346" "Monday" 
# 2015-01-13 "0.989141173831105" "Tuesday" 
# 2015-01-14 "1.00696993757364" "Wednesday" 
# 2015-01-15 "0.971090909090909" "Thursday" 
# 2015-01-16 "0.990283088762806" "Friday" 
# 2015-01-20 "1.00816028405639" "Tuesday" 
# 2015-01-21 "1.00550716857753" "Wednesday" 
# 2015-01-22 "1.01940867006333" "Thursday" 
# 2015-01-23 "1.00605520909915" "Friday" 
# 2015-01-26 "0.994373131604943" "Monday" 
# 2015-01-27 "0.97082370522725" "Tuesday" 
# 2015-01-28 "0.980277148183554" "Wednesday" 
# 2015-01-29 "1.02218020976616" "Thursday" 
# 2015-01-30 "0.989527044095827" "Friday" 

は、具体的にあなたのデータのため、各行は、月曜日から金曜日までのデータを取り、金曜日のタイムスタンプを割り当てます:

  • 最初の週次データをエントリ2015-01-02は、2014-12-29(A月曜日)〜2015-01-04(A日曜日)の間の値をとり、金曜日のちょうど1つの値である2015-01-02の値をとる特殊なケースです(そのため、最初の週間バーのOHLC = Cです)。
  • 2015-01-09行のデータは、2015-01-05から2015-01-11の間のd_aaplから取得されます。高いのは2015-01-08、控え目は2015-01-05、控え目の値は2015-01-05、最後の値は2015-01-09です。
  • 行番号2015-01-16のデータは、d_aaplから2015-01-12~2015-01-18などになります。あなたの2番目の質問について

、他の回答には、すでによく仕事を提供していますが、?merge.xtsと特定の状況では、より簡潔でそのfill引数、見て検討するかもしれない:res=merge(d_aapl,Cl(w_aapl), fill = na.locf)

1

ちょうど次の行を追加します。

res$d_aapl.Close <- na.locf(res$d_aapl.Close) 

> res 
      AAPL.Close d_aapl.Close 
2015-01-02 0.9815064 0.9815064 
2015-01-05 0.9811617 0.9815064 
2015-01-06 0.9973719 0.9815064 
2015-01-07 1.0051306 0.9815064 
2015-01-08 1.0243522 0.9815064 
2015-01-09 0.9941422 0.9941422 
2015-01-12 0.9702487 0.9941422 
2015-01-13 0.9891412 0.9891412 
関連する問題