2017-07-19 84 views
1

log returns of multiple securities for multiple time periodの計算に従っており、セット。今、私の問題は、最新の日付として月間リターンを計算するときに始まります。月次リターンを得るために式を使用:data.frame(...、check.names = FALSE)のエラー:引数が異なる行数を意味する:6790、6771

logs=data.frame(
    cbind.data.frame(
     prices$Date[-1], 
     na.locf(diff(as.matrix(log(prices[,-1])), lag = 20)) 
     ) 
    ) 

を私は取得しています:行数の違いは、私は毎月のリターンを得るために使用される20日間の遅れから来ている

Error in data.frame(..., check.names = FALSE) : arguments imply differing number of rows: 6790, 6771

当然のことを、日付のとおり。私はまた、日付の年次リターンを計算する必要があり、私はそうするときも同じエラーが発生すると思います。私はcbind.data.frameの代わりにmerge.data.frameを使ってみましたが、私のコンピュータがクラッシュするだけでした。

私は私のデータセットの最初の10行と列を取っ:

 Date `2GO` AAA AB ABA ABG ABS AC ACE ACR 
     <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 
1 28-Jun-17 23.25 1.61 14.98 0.37 28.25 42.85 841.5 1.61 1.50 
2 27-Jun-17 23.90 1.61 14.98 0.37 27.95 42.90 842.5 1.61 1.53 
3 23-Jun-17 24.60 1.61 14.98 0.38 27.00 42.90 840.5 1.70 1.57 
4 22-Jun-17 24.40 1.61 14.98 0.37 28.05 43.20 855.0 1.67 1.57 
5 21-Jun-17 24.80 1.61 15.00 0.37 28.05 43.10 841.5 1.67 1.57 
6 20-Jun-17 25.10 1.61 14.68 0.37 28.85 43.45 858.0 1.70 1.58 
7 19-Jun-17 24.85 1.61 14.68 0.37 29.05 43.40 860.0 1.75 1.55 
8 16-Jun-17 25.70 1.61 14.68 0.38 29.60 43.45 850.0 1.77 1.52 
9 15-Jun-17 26.20 1.61 14.48 0.38 29.55 43.30 867.0 1.69 1.53 
10 14-Jun-17 26.85 1.61 16.00 0.37 29.50 43.35 867.5 1.69 1.52 

フロリアンが遅れて3を提供し、使用されるコードを使用する:

logs=data.frame(
    cbind.data.frame(
    p$Date[-1], 
    c(rep(NA,3), na.locf(diff(as.matrix(log(p[,-1])), lag = 3))) 
) 
) 

はまだエラーを出す:

Error in data.frame(..., check.names = FALSE) : arguments imply differing number of rows: 9, 66

エラーを修正したり、行番号を修正する方法はありますか?

答えて

0

Edited based on updated question.

初期期間ではなく、20期間の遅延が存在するため、NAで埋め込む可能性があります。問題はprices$Date[-1]の行数がna.locf(diff(as.matrix(log(prices[,-1])), lag = 20))と異なることです。それらの行の数が等しいことを確認する必要があります。たとえば、このような:

p = read.table(text="Date `2GO` AAA AB ABA ABG ABS AC ACE ACR 
28-Jun-17 23.25 1.61 14.98 0.37 28.25 42.85 841.5 1.61 1.50 
27-Jun-17 23.90 1.61 14.98 0.37 27.95 42.90 842.5 1.61 1.53 
23-Jun-17 24.60 1.61 14.98 0.38 27.00 42.90 840.5 1.70 1.57 
22-Jun-17 24.40 1.61 14.98 0.37 28.05 43.20 855.0 1.67 1.57 
21-Jun-17 24.80 1.61 15.00 0.37 28.05 43.10 841.5 1.67 1.57 
20-Jun-17 25.10 1.61 14.68 0.37 28.85 43.45 858.0 1.70 1.58 
19-Jun-17 24.85 1.61 14.68 0.37 29.05 43.40 860.0 1.75 1.55 
16-Jun-17 25.70 1.61 14.68 0.38 29.60 43.45 850.0 1.77 1.52 
15-Jun-17 26.20 1.61 14.48 0.38 29.55 43.30 867.0 1.69 1.53 
14-Jun-17 26.85 1.61 16.00 0.37 29.50 43.35 867.5 1.69 1.52",header=T) 

p=p[order(p$Date),] 

logs=data.frame(
    cbind.data.frame(
    Date = p$Date[4:nrow(p)], 
    na.locf(diff(as.matrix(log(p[,-1])), lag = 3)) 
) 
) 

出力:

 Date  X.2GO. AAA   AB   ABA   ABG   ABS 
7 19-Jun-17 -0.07740807 0 -0.086102699 0.00000000 -0.015371780 0.001152738 
6 20-Jun-17 -0.04289156 0 0.013717636 -0.02666825 -0.023973751 0.003458217 
5 21-Jun-17 -0.03564734 0 0.021564178 -0.02666825 -0.053785729 -0.008087855 
4 22-Jun-17 -0.01827462 0 0.020229955 0.00000000 -0.035029851 -0.004618946 
3 23-Jun-17 -0.02012140 0 0.020229955 0.02666825 -0.066273127 -0.012739026 
2 27-Jun-17 -0.03696519 0 -0.001334223 0.00000000 -0.003571432 -0.004651171 
1 28-Jun-17 -0.04827800 0 0.000000000 0.00000000 0.007104826 -0.008134850 
      AC   ACE   ACR 
7 -0.008683123 0.034887259 0.019544596 
6 -0.010434877 0.005899722 0.032157112 
5 -0.010050336 -0.058155920 0.032365285 
4 -0.005830920 -0.046792162 0.012820688 
3 -0.020607147 0.000000000 -0.006349228 
2 0.001187649 -0.036589447 -0.025807884 
1 -0.015915455 -0.036589447 -0.045610511 

は期待通りの出力があるかどうかを確認することを忘れないでください。私は、コードが動作していない理由と、ステートメント内の行数を一致させる方法を示しています。実行している操作に慣れていません。お役に立てれば!

+0

こんにちは@Florian、この1つで私を助けてくれてありがとう。残念ながら、上記の公式を使用して同じエラーが発生しています.6790、6771、6790、1855547の異なる番号でのみ表示されます。最初のコードをテストしても動作しますが、 't。 – samael

+0

小さな例を作る方法はありますか?データセットの最初の10行を取り出し、3のラグを使用しますか?あなたの質問に使用するデータを貼り付けるには、https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-exampleを参照してください。そうすれば、簡単に手助けすることができます。 – Florian

+0

こんにちは@Florian、サンプルを投稿していないことに謝罪します。私は元の投稿に自分のデータセットの最初の10行と列を含め、あなたが提供した数式を3ラグとして使用しました。 – samael

関連する問題