gpt4 book ai didi

r - 计算指定列数的累积和列

转载 作者:行者123 更新时间:2023-12-01 19:35:06 24 4
gpt4 key购买 nike

下面你可以看到我有一个更大的 table 的例子

library(data.table)
input <- data.table(ID = c("A", "B"),
Para = c(2.8, 5),
Value1 = c(50, 80),
Value2 = c(80, 40),
Value3 = c(80, 100),
Value4 = c(60, 10),
Value5 = c(40, 80))

我想要实现的是添加一个列,其中包含 Para 列中指定的下一个 x 列的累计总和。但如果逗号后有数字,则列中的值应按数字调整。

所以对于第一行(Para = 2.8)结果应该是

1*50 + 1*80 + 0.8*80 = 194

第二行(Para = 5)的结果应该是

1*80 + 1*40 + 1*100 + 1*10 + 1*80 = 310

决赛 table 应该是这样的

output <- cbind(input, Result = c(194, 310))

我想到的是将 Para 值 2.8 拆分为一个由 5 个数字组成的百分比向量,即整个范围。

c(1, 1, .8, 0, 0)

将列 Value1:Value5 与该向量相乘,然后对所有 Value1:Value5 求和。但我不知道如何将 2.8 拆分成这样的向量,也许还有我不知道的更好的解决方案。谢谢。

最佳答案

这是一个解决方案,它以宽格式保存数据并使用 Reduce() 来计算“加权行总和”:

library(data.table)
input[, Cumul := {
tmp <- c(rep(1, Para), Para %% 1)
mul <- replace(rep(0, ncol(.SD)), seq_along(tmp), tmp)
Reduce(sum, .SD * mul)
}, .SDcols = Value1:Value5, by = ID]
input[]
   ID Para Value1 Value2 Value3 Value4 Value5 Cumul
1: A 2.8 50 80 80 60 40 194
2: B 5.0 80 40 100 10 80 310

这将适用于 .SDcols 指定的任意数量的列,或者如果 Para 更大。

关于r - 计算指定列数的累积和列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51873979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com