根据R中的上一行和当前行按组计算 [英] Calculating by group based on previous and current row in R

查看:8
本文介绍了根据R中的上一行和当前行按组计算的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我可以根据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(组),所以我需要按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]

这篇关于根据R中的上一行和当前行按组计算的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆