两个 Spotfire 列之间的累积乘积

问题描述 投票:0回答:2

我正在尝试在 Spotfire 中计算 Column1 和 Column2 上一行之间的累积乘积。如下表所示,我需要 Column2 是 DataColumn1 与CalculatedColumn2 先前值的乘积。 Column2 是我试图创建的计算列。

我陷入困境,因为如果使用 Spotfire 计算列,显然存在循环依赖性。因此,我没有代码或错误可以分享,我知道简单的计算列不起作用。我认为我需要使用自定义表达式函数或某种 R 代码才能做到这一点,但从未在 R 中工作过并且需要帮助!

此处链接的问题和答案正是我想要做的。此问题的答案有一个适用于此人的代码,但我如何在 Spotfire 计算列中使用该代码并输入相应的列?

数据列A 计算列B
6 6
8 48
9 432
2 864
4 3456
6 20736

非常感谢任何帮助!谢谢!

r calculated-columns spotfire
2个回答
0
投票

您正在寻找该功能

cumprod
:

library(dplyr)

df |>
  mutate(CalculatedColumnB2 = cumprod(DataColumnA))

以 R 为基础

df$CalculatedColumnB2 <- Reduce(`*`, df$DataColumnA, accumulate = T)

输出

  DataColumnA CalculatedColumnB CalculatedColumnB2
1           6                 6                  6
2           8                48                 48
3           9               432                432
4           2               864                864
5           4              3456               3456
6           6             20736              20736

数据

df <- structure(list(DataColumnA = c(6L, 8L, 9L, 2L, 4L, 6L), CalculatedColumnB = c(6L, 
48L, 432L, 864L, 3456L, 20736L)), class = "data.frame", row.names = c(NA, 
-6L))

0
投票

我不确定我是否完全理解所涉及的列,因为图像与描述不完全匹配。如果图像中的CalculatedColumnB 就是您所需要的,那么您可以在不涉及R 代码的情况下完成此操作:

1 - 创建一个计算列 [RowID] 为您提供行 ID(如果您还没有):

RowId()

2 - 创建累积产品列:

Product([DataColumnA]) over (AllPrevious([RowID]))

如果您有额外的列需要分组,您可以添加 Intersect(..) 例如

Product([DataColumnA]) over Intersect(AllPrevious([RowID]),[GroupColumn])
© www.soinside.com 2019 - 2024. All rights reserved.