加重インデックスのスプライスの作成に問題があります。次のデータフレームを返すスプライシング加重インデックス
a=(1:10)
b=(14:23)
c=rep(1,10)
wa=c(2,2,2,2,2,6,6,6,6,6)
wb=c(5,5,5,5,5,2,2,2,2,2)
wc=c(3,3,3,3,3,2,2,2,2,2)
z=data.frame(a,b,c,wa,wb,wc)
z$ind=rowSums(z[,1:3]*z[,4:6])/rowSums(z[,4:6])
:
a b c wa wb wc ind
1 1 14 1 2 5 3 7.5
2 2 15 1 2 5 3 8.2
3 3 16 1 2 5 3 8.9
4 4 17 1 2 5 3 9.6
5 5 18 1 2 5 3 10.3
6 6 19 1 6 2 2 7.6
7 7 20 1 6 2 2 8.4
8 8 21 1 6 2 2 9.2
9 9 22 1 6 2 2 10.0
10 10 23 1 6 2 2 10.8
重みは(WA、WB、WC)がレコード6で変更されている私は、次のサンプルデータを有します。だから、7.6が11になるように、レコード6にインデックスをスプライスしたいと思います。前のレコードの重みで値(a、b、c)を計算し、それを7.6で割り算する必要があります。その後、重みが再び変化するまで、それを次のすべての数値に適用します。それは1の値を返します
changeWeight=function(x){
for(i in 2:NROW(z)) {
z$test[i] <- if(z$wa[i]-z$wa[i-1]==0) 0 else 1
}
z
}
は重量がそうのように変更されているところはどこでも:
a b c wa wb wc ind test
1 1 14 1 2 5 3 7.5 NA
2 2 15 1 2 5 3 8.2 0
3 3 16 1 2 5 3 8.9 0
4 4 17 1 2 5 3 9.6 0
5 5 18 1 2 5 3 10.3 0
6 6 19 1 6 2 2 7.6 1
7 7 20 1 6 2 2 8.4 0
8 8 21 1 6 2 2 9.2 0
9 9 22 1 6 2 2 10.0 0
10 10 23 1 6 2 2 10.8 0
は、今、私が作成しようとした次の関数は、私は私の重みのいずれかが変更されている場所を見つけることができます値6は、インデックス6にインデックスをスプライスするために乗算されます。私は、次のことを試してみました:
spliceValue=function(x){
for(i in 2:NROW(z)){
z$splice[i]=if(z$test[i]==1&z$splice[i-1]!=NA) (rowSums(z[i,1:3]*z[i-1,4:6])/rowSums(z[i-1,4:6]))/z$ind[i] else z$splice[i-1]
}
z
}
しかし、それは、このエラーを返します:
Error in if (z$test[i] == 1 & z$splice[i - 1] != NA) z$ind[i - 1]/z$ind[i] else z$splice[i - :
argument is of length zero
私は何を取得したいと思いことはこれです:その後、私はスプライスによってIND掛けると持つことができます
a b c wa wb wc ind test splice
1 1 14 1 2 5 3 7.5 NA NA
2 2 15 1 2 5 3 8.2 0 0.000000
3 3 16 1 2 5 3 8.9 0 0.000000
4 4 17 1 2 5 3 9.6 0 0.000000
5 5 18 1 2 5 3 10.3 0 0.000000
6 6 19 1 6 2 2 7.6 1 1.447638
7 7 20 1 6 2 2 8.4 0 1.447638
8 8 21 1 6 2 2 9.2 0 1.447638
9 9 22 1 6 2 2 10.0 0 1.447638
10 10 23 1 6 2 2 10.8 0 1.447638
素晴らしい円滑なインデックス。重みに複数の変更有すること一例を拡大
'changeWeight'関数に注意してください。どの環境で 'z $ test'を作成していますか?どのような環境でお持ちになりたいですか? – BenBarnes
私はあなたの 'spliceValue'関数で' $ $ plice [i-1] 'を持っているという私のコメントを削除しましたが、それは過度に面倒な削除でした。 'pliceValue'を実行する前に 'splice'という名前の' z'列を定義し、上記のコメントと組み合わせて、よりスムーズに進むべきです。 – BenBarnes
インデックスに複数の重量変化がある場合は、適切にスプライスする方法があります。[ここ](http://stackoverflow.com/questions/10543199/splicing-weighted-index-and-getting-a-smooth-value) 。 – thequerist