我正在尝试在 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 |
非常感谢任何帮助!谢谢!
您正在寻找该功能
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))
我不确定我是否完全理解所涉及的列,因为图像与描述不完全匹配。如果图像中的CalculatedColumnB 就是您所需要的,那么您可以在不涉及R 代码的情况下完成此操作:
1 - 创建一个计算列 [RowID] 为您提供行 ID(如果您还没有):
RowId()
2 - 创建累积产品列:
Product([DataColumnA]) over (AllPrevious([RowID]))
如果您有额外的列需要分组,您可以添加 Intersect(..) 例如
Product([DataColumnA]) over Intersect(AllPrevious([RowID]),[GroupColumn])