r - 根据R中的前一行和当前行按组计算

标签 r row

我可以根据 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]

关于r - 根据R中的前一行和当前行按组计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14393499/

相关文章:

c# - Xamarin Grid 如何知道按下了哪个按钮

r - 将 ggplotly 和 ggplot 与拼凑而成?

r - 当我尝试在 dplyr group_map 函数中使用 defuse-inject 模式时失败

r - 使用 dplyr 计算 95%-CI 的长度

php - 如何仅回显我的 $row 的索引

mysql - 需要从数据库中删除所有计数为 1 的标签

r - 获取第一个非 NA 值的索引

r - 如何在每一行应用库命令并创建新变量

mysql - 在 MySQL 中选择所有具有不同和条件的行

r - 如何使用 R 将每个文件的数据添加为附加行,从而将不同的 .csv 文件合并为一个完整的文件?