ための計算3月のリターン私は毎月の株式リターンのデータフレームを持っている:月次リターンのデータフレーム
d<-data.frame(replicate(5,sample(rnorm(1),6,rep=TRUE)))
今、私は次のようにn個ヶ月のリターンにこれらのリターンを変換したいと思います(例えばnの= 3):
d[1,1]=(1+d[1,1])*(1+d[2,1])*(1+d[3,1])
d[2,1]=(1+d[2,1])*(1+d[3,1])*(1+d[4,1])
d[3,1]=(1+d[3,1])*(1+d[4,1])*(1+d[5,1])
そして、次の列に同じ
:d[1,2]=(1+d[1,2])*(1+d[2,2])*(1+d[3,2])
d[2,2]=(1+d[2,2])*(1+d[3,2])*(1+d[4,2])
d[3,2]=(1+d[3,2])*(1+d[4,2])*(1+d[5,2])
は、私はあなたのアイデアを得ると思います。次のように
は今、私が進むことを考えていた方法は、次のとおりです。
apply(d, 2, fun)
楽しみは次のように定義されている場所:
fun<-function(df_column)
{
# Loop over df_column rows
for (row in 1:nrow(df_column)) {
d[row]=(1+d[row])*(1+d[row+1])*(1+d[row+2])
}
}
このアプローチでは意味をなさないか、よりエレガントな方法はありますか?
私は 'zoo'からその関数を使用しているのを見たことがありません。私が気付いた好奇心の中で、それは 'map'ソリューションよりもはるかに遅く、なぜそうだったのか不思議でした。 –
これは動物園のオブジェクトに合わせて作られ、オブジェクトを動物園の内部で動物園に変換してから戻って、Rで書かれています。また、非常に一般的です。あなたは 'exp(rollsum(log(1 + d)、3、align =" left "、fill = NA))'を試すことができます。また、C++で書かれたいくつかのローリング関数を持つRcppRollパッケージもあります。 –
優秀、ヒントありがとう! –