我可以根据 R 中的前一行和当前行进行计算。
对于此数据框(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 中处理这个问题?
谢谢。
由于似乎每一步的结果都取决于您现在执行的方式中的前一步,因此请摆脱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]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)