如何在R语言中实现每行值与之前所有行值相乘?
解决R语言中计算累积乘积的问题
你需要的其实是累积乘积的计算,base R里就有专门的函数cumprod()可以直接搞定,完全不用手动拼接前一行的数值。
具体实现代码
先保留你的原始数据生成代码,然后用cumprod()生成new列:
set.seed(111) df <- data.frame(as=sample(10)) # 生成累积乘积的new列 df$new <- cumprod(df$as)
函数说明
cumprod()的作用是对输入的向量进行逐行累积乘积计算:
- 第1行的
new值就是as列的第1个值(因为之前没有行,乘积就是自身) - 第2行的
new值是第1行as值 × 第2行as值 - 第n行的
new值是前n-1行as值的乘积 × 第n行as值
这样正好符合你要求的“当前行值与之前所有行值的乘积”的需求。
验证结果
运行上述代码后,你可以查看第10行的new值,会和你预期的3024000一致(因为set.seed(111)固定了随机序列,累积乘积结果是确定的)。
额外补充(如果你用tidyverse)
如果你习惯用tidyverse系列工具,也可以用dplyr::mutate()来实现:
library(dplyr) df <- df %>% mutate(new = cumprod(as))
内容的提问来源于stack exchange,提问作者fabotic
相关产品推荐
相关产品推荐

