【问题标题】:Rolling cumulative product滚动累积产品
【发布时间】:2017-03-07 18:14:15
【问题描述】:

我的数据看起来像这样

    A    B    
 1  1    1
 2  3    
 3  5    
 4  7    

我想在 B 列中计算以下滚动累积产品。在 Excel 中,我将有以下公式

B2 = (1 + A2/10)*B1

到目前为止,我已经尝试使用一个辅助列,它是 1 + Ax/100 的结果,而一个完全相同的列只是滞后 1,然后彼此相乘。由于未应用滚动产品,因此无法使用。我也尝试过 s.th like

rollapply(columnm,1,FUN = prod, fill = NA, align = 'left')

不幸的是它仍然不起作用。

我希望为 B 获得这些结果

    A    B    
 1  1    1
 2  3    1.3
 3  5    1.95
 4  7    3.315

[编辑]

作为对原始问题的扩展,有没有办法在基于附加列的 ifelse 语句中执行相同的滚动乘积?

    A    B   C 
 1  1    1   1
 2  3    1   1
 3  5    0
 4  7    0

excel 等价物是

C3 = IF(B3=0,(1+A3/10)*C2,1)

我无法让接受的解决方案适用于这种情况,因为它总是只引用 A 列中的数据,我最终得到的结果与之前的解决方案相同。

我希望得到以下结果

    A    B   C 
 1  1    1   1
 2  3    1   1
 3  5    0   1.5
 4  7    0   2.55

提前致谢

【问题讨论】:

  • 为什么不使用 for 循环?

标签: r cumulative-sum


【解决方案1】:

这是你想要的吗?

A=c(1,3,5,7) 
cumprod(c(1,(A[-1]/10+1)))

> cbind(A,B=cumprod(c(1,(A[-1]/10+1))))
     A     B
[1,] 1 1.000
[2,] 3 1.300
[3,] 5 1.950
[4,] 7 3.315

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    相关资源
    最近更新 更多