私はここで求めていたのと同じようなことをしようとしていますが、残念ながらそれを解決することはできません。
これは私のデータフレーム(データ)、価格の時系列です:
Date Price Vol
1998-01-01 200 0.3
1998-01-02 400 0.4
1998-01-03 600 -0.2
1998-01-04 100 0.1
...
1998-01-20 100 0.1
1998-01-21 200 -0.4
1998-01-21 500 0.06
....
1998-02-01 100 0.2
1998-02-02 200 0.4
1998-02-03 500 0.3
1998-02-04 100 0.1
etc.
Rに伝えたいのですが
- 「Vol」の最初の値を取り、それを「Price」の20番目の値で割ってから
- 「Vol」の2番目の値を取り、それを「Price」の21番目の値で除算します。
- 「Vol」の3番目の値を取り、それを「Price」の22番目の値で割ってから
- 等
私の他の投稿では、この関数を使用して、20日間の保有期間にわたるリターンを計算することができました。
> data.xts <- xts(data[, -1], data[, 1])
> hold <- 20
> f <- function(x) log(tail(x, 1)) - log(head(x, 1))
> data.xts$returns.xts <- rollapply(data.xts$Price, FUN=f,
width=hold+1, align="left", na.pad=T)
上記の問題に対して非常に似たようなことをする方法はありますか?だから何かのような
f1 <- function(x,y) head(x, 1) / tail(y,1)
ここで、xは「Vol」、yは「Price」で、「rollapply」を適用しますか?
どうもありがとうございます
更新:@ Dr G:ご提案ありがとうございます。少し変更を加えるだけで、私が望んでいたことを実行できました。
data.xts <- xts(data[, -1], data[, 1])
hold <- 20
data.xts$quo <- lag(data.xts[,2], hold) / data.xts[,1]
私の問題は、結果のデータフレームが次のようになることです。
Date Price Vol quo
1 1998-01-01 200 0.3 NA
2 1998-01-02 400 0.4 NA
3 1998-01-03 600 -0.2 NA
4 1998-01-04 100 0.1 NA
...
21 1998-01-20 180 0.2 0.003
結果としてNAが存在する必要があることはわかっていますが、最初の20の観測ではなく、最後の20の観測に対してのみです。上記の式は正しい値を計算しますが、最初の行ではなく21番目の行から値を計算します。どうすればそれを変えることができるか知っていますか?