2017-02-27 16 views
1

データフレームの1つの行の観測値に基づいて、値の新しいベクトルを計算しようとしています。最初の値から始め、2番目の値を掛けて3番目の値に今計算した値を掛けたいと思います。私はそれを計算するまで、存在しない値をどのように参照するのか分かりません。R内の行の値を反復的に掛けるR

これは私が手書きこれを書いていた場合、私はどうなるのかです:

index1 <- rnorm(12) 
index2 <- rnorm(12) 
index3 <- rnorm(12) 
index4 <- rnorm(12) 
index5 <- rnorm(12) 
data <- rbind(index1, index2, index3, index4, index5) 

splice1=data[2,1] 
splice2=splice1*data[2,2] 
splice3=splice2*data[2,3] 
splice4=splice3*data[2,4] 
splice5=splice4*data[2,5] 

splices <- c(splice1, splice2, splice3, splice4, splice5) 

私はデータの25行のためにこれを行う必要があります。

私はこの投稿を見つけました しかし、データセットからインデックスを作成して参照しているときに、この作業を行う方法がわかりません。

私はこれを行う簡単な方法が必要であると確信していますが、私はどこから始めるべきかわかりませんでした。

ご協力いただきありがとうございます。データの各列上

答えて

3

?apply?cumprod機能:ここで

t(apply(data, 1, cumprod)) 

#    [,1]  [,2]  [,3]  [,4]   [,5] 
#index1 0.37891415 1.02182094 0.62823228 0.03616281 -0.0262988311 
#index2 -0.06586518 -0.03332061 -0.02814185 0.01755643 -0.0238307051 
#index3 -0.09113830 0.13385726 -0.11245386 0.10917885 -0.1466176651 
#index4 -0.53727635 0.71947970 0.87007225 0.19779160 -0.2119473091 
#index5 -0.83982393 -0.08571211 -0.08986865 0.02597184 -0.0006549512 

行2は馴染み見える:

splices 
#  index2  index2  index2  index2  index2 
#-0.06586518 -0.03332061 -0.02814185 0.01755643 -0.02383071 

cumprod()は、本質的に単にcum ulative prod、数字の各供給セットに沿って乗算されますuct:

cumprod(1:5) 
#[1] 1 2 6 24 120 
速度が問題である

場合は、matrixStatsパッケージに目を向けることができます。このため

library(matrixStats) 
rowCumprods(data) 
+0

どうもありがとうございましたが。とても有難い。 – Laura