2

Rの前の行と現在の行に基づいて計算を行うことができます。

このdataframe(df)の場合:

    A B 
[1] 2 2 
[2] 2 3 
[3] 4 5.5 
... 

B2 = A2 + 0.5*B1 

このコードを使用して、この関数を計算できます。

for( i in 2:nrow(df) ) { 
        B[i] <- 1/2 * B[i-1] + df$A[i] 
} 

ただし、データセットにId(group)があるため、この関数をidで計算する必要があります。

    id A B
[1] 1  0 0
[2] 1  2 2 
[3] 1  2 3
[4] 2  1 1 
[5] 2  4 4.5
[6] 2  4 6.25 
... 

B2 = A2 + 0.5*B1
B4 = A4 + 0.5*0 (becasue id is changed)
B5 = A5 + 0.5*B4 
... 

Rでこの問題をどのように処理できますか?ありがとう。

4

1 に答える 1

3

各ステップの結果は、現在の方法で前のステップに依存しているように見えるため、forループを取り除くのは難しいように見えます。このようなものが十分に速いかどうか疑問に思います:

require(data.table)
require(compiler)

df <- data.table(df)

f <- function(A, B) {
  for(i in seq_along(B)[-1]) {
    B[i] <- 0.5 * B[i - 1L] + A[i]
  }

  B
}

g <- cmpfun(f)

df[, B := g(A, B), by = id]
于 2013-01-18T07:51:25.080 に答える