gpt4 book ai didi

r - 将常数乘以前一行并将结果累加到 R 中

转载 作者:行者123 更新时间:2023-12-05 01:25:54 24 4
gpt4 key购买 nike

我正在尝试计算数据框中的新列,该列将常量乘以前一行(在新创建的列 B 中)的值并累加结果。

为了澄清,这里是我的原始数据的一个例子:

A  
---
100
200
300
400
500

这是我想要完成的:

A    B
-----------
100 100.00
200 302.00
300 608.04
400 1020.20
500 1540.60

(The constant being in this case: 0.02)

我在 excel 中使用的(近似)公式与此类似:

=(B1*(1+constant)+A2) [In Cell B2]

我已经尝试使用 dplyr 中的滞后、变异和 cumsum 来实现这一点,但到目前为止我还没有成功。这是迄今为止我已成功实现的可重现示例:

rate = .02
A <- c(100,200,300,400,500)

df <- data.frame(A)

df = df %>%
mutate(B = lag(A,default=0)*(1+rate)) %>%
mutate(B = cumsum(B)+df$A)

这会产生以下输出(与我想要得到的不同):

A    B
100 100.00
200 302.00
300 606.00
400 1012.00
500 1520.00

谁能帮我写一些代码来计算这个?感谢您的帮助!

最佳答案

我们可以使用accumulate

library(dplyr)
library(purrr)
df %>%
mutate(B = accumulate(A, ~ .x*(1 + rate) + .y))

-输出

  A        B
1 100 100.000
2 200 302.000
3 300 608.040
4 400 1020.201
5 500 1540.605

或者在 base R 中使用 Reduce 的相同选项

 Reduce(function(.x, .y) .x * (1 + rate)  + .y, df$A, accumulate = TRUE)
[1] 100.000 302.000 608.040 1020.201 1540.605

关于r - 将常数乘以前一行并将结果累加到 R 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70623352/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com