如何在R中使用mutate实现每行结果值的累积传递相乘?
实现累积乘积的正确方法
你创建的数据集:
bla <- data.frame(a = c(100, 2:10))
你想要的是累积乘积——从第一个值100开始,每行结果传递到下一行相乘。之前用mutate(cumulative = a * lag(a))失败,是因为lag(a)取的是原始列a的上一行值,不是新生成的cumulative列的计算结果,所以第三行只会算32,而非3200。
直接用R内置的cumprod()函数就能解决问题,它专门用来计算序列的累积乘积:
bla |> mutate(cumulative = cumprod(a))
运行后得到的cumulative列就是你要的结果:
- 第1行:100
- 第2行:100*2=200
- 第3行:200*3=600
- ...
- 最后一行:10023*...*10
内容的提问来源于stack exchange,提问作者Doug Fir
相关产品推荐
相关产品推荐

