在 R 中运行(累积)产品?

标签 r

<分区>

x <- as.data.frame(1:5)

我想用上面的数据框创建一个新列,其中有一个正在运行的产品,即第一个元素应该是

1*2*3*4*5 = 120 then
2*3*4*5 = 120 then
3*4*5 = 60

等等。

我如何在 R 中执行此操作?

结果应该是

> x[,"result"] <- c(120,120,60,20,5)
> x
  1:5 result
1   1    120
2   2    120
3   3     60
4   4     20
5   5      5

最佳答案

我们可以使用cumprod

rev(cumprod(rev(x[[1]])))
#[1] 120 120  60  20   5

或者

rev(Reduce(`*`, rev(x[[1]]), accumulate = TRUE))

此外,accumulate 中有一个方便的包装器

library(tidyverse)
x %>% 
   mutate(result = accumulate(`1:5`, `*`, .dir = "backward"))
#  1:5 result
#1   1    120
#2   2    120
#3   3     60
#4   4     20
#5   5      5

关于在 R 中运行(累积)产品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56044186/

相关文章:

r - 如何使用编程连接到 R Shiny 网站

r - 如何在 ggplot 中的多变量条形图中重新排序系列?

r - DiametermeR:如何在节点内插入换行符?

r - R中的第四角算法

r - R 中 ggplot2 yaxis 标签中的 "Squared"上标

r - ggplot2:组合条形图和折线图对齐

r - Facet_wrap 像使用 R 基础图形的绘图

r - 如何使用多个变量更改 ggplot 中图例的文本和标题

r - 如何将数字数据转换为 R 中的货币?

r - 按组划分列(在数据框中分组)