2016-12-11 7 views
1

私は300以上の企業があり、それらの月間収益を計算し、後でそれをデータセットの変数の1つとして使用する必要があります。 私はヤフーからの価格をダウンロードしてquantmodパッケージを使用して月次リターンを計算:monthlyReturnと不等月の長さ

require(quantmod)  
stockData <- lapply(symbols,function(x) getSymbols(x,auto.assign=FALSE, src='yahoo', from = '2000-01-01')) 
    stockDataReturn <- lapply(stockData,function(x) monthlyReturn(Ad(x))) 

私が持っている問題は、いくつかの企業が(による取引は、などを停止する)、出力リストに反映されている別の月の端を持っているということです。会社AAAは2013-12-30、会社BBBは2013-12-31、残りはサンプルです。

私は

returns <- do.call(merge.xts, stockDataReturn) 

を使用してリストをマージする場合それはAAA社を除くすべてのNASとの2013年12月30日のために個別の行を作成します。 どうすれば解決できますか?私が理解することは、マージする前にインデックスとして使用する必要がある年次フォーマットに固執する必要があるということです。

理想的には、monthlyReturnステージで、月末ではなく月の日付の開始を使用するのが理想です。

答えて

2

lubridatefloor_dateを使用して、月のタイムスタンプの末尾ではなく、月のタイムスタンプの同じ先頭にマージすることができます。または、合併する前にすべての有価証券の月​​末タイムスタンプを丸めるにはceiling dateを使用してください。

library(lubridate) 
stockDataReturn <- lapply(stockDataReturn, 
           function(x) { 
            index(x) <- floor_date(index(x), "month") 
            # Or if you want to round to end of month change to: 
            # index(x) <- ceiling_date(index(x), "month") 
            x 
           }) 
returns <- do.call(merge, stockDataReturn) 
colnames(returns) <- symbols 
+0

ありがとうございました!それはうまくいった! – m45ha

+0

これは非常に便利です。私たちは月の最後の日をどうやって得るのですか? 'ceiling_date(index(x)、" month ")-1'? –

+0

@ R.S。はい、インデックスベクトル内の日付オブジェクトを扱うことができますが、インデックスベクトルのPOSIXctオブジェクトで動作するより安全なアプローチは 'index(x)< - ceiling_date(index(x)、" month ") - days(1 ) ' – FXQuantTrader

関連する問題