2017-06-22 6 views
0

4行のデータフレームがあります。私はトップまでそれを再保存するためにI sapplyの下から一番上へ各行をループ()するにはどうすればよいの列サプリを使用して各行で関数を繰り返す方法

aa<-data.frame(groupid=c(0:3),var=rep(10,4)) 
>aa 
groupid var 
0 10 
1 10 
2 10 
3 10 
#if iterating over only 4th row 
>i=4 

#What I want to achieve-> 
>for(x in 1:aa$groupid[i]) { 
    aa$var[i]<-aa$var[i]+aa$var[i-x] 
} 
>aa$var[i] 
40 #aa$var[4]+aa$var[3]+aa$var[2]+aa$var[1] 

#How I want to achieve--> using sapply() as my real data frame is huge and 
#for loop is taking a lot of time 

#What I have achieved till now--> 
>bb<-sapply(aa$groupid[i], function(x){ 
    sum(aa$var[i],aa$var[i-x]) 
}) 
>bb 
20 #aa$var[4]+aa$var[3] 

を現在の行の値と同じ列の前の行の値を合計する必要がありますが、繰り返す必要があります同じ変数の値?

答えて

1

ループは、前のすべての行(評価対象の行を含む)の累積合計を計算します。その場合

解決策は単純です:

aa$var2 = cumsum(aa$var) 

結果:

> aa 
    groupid var var2 
1  0 10 10 
2  1 10 20 
3  2 10 30 
4  3 10 40 
+0

が、私は答えを得ました!ありがとう! – Riya

関連する問題