gpt4 book ai didi

r - R 中条件的累积和

转载 作者:行者123 更新时间:2023-12-05 00:53:35 25 4
gpt4 key购买 nike

说我有

a <- c(0, 22, 0, 2, 0, 0, 20, 20, 20, 0, 0)

我想做一个累积和,由此我减去 5a 中的每个值,然后加上之前的值。

但是,我也有一个条件,如果 a变得小于 0 , 我想要 cumsum 到 0如果 a变得大于 40 , 累积到 40 .

所以,我想得到
(0, 17, 12, 9, 4, 0, 15, 30, 40, 35, 30)

任何人都可以帮忙吗?几个小时以来,我一直在尝试很多东西!

@Holger,该方法并不总是有效。
因此,如果我添加几个额外的零,它不会提供正确的解决方案
a <- c(0, 22, 0, 2, 0, 0, 0, 0, 20, 20, 20, 0, 0)


 0 17 12  9  4  0  1  7 22 37 52 47 42

最佳答案

以下是一些替代方案:

1) 循环 像这样创建一个单行循环:

b <- a; for(i in seq_along(b)[-1]) b[i] <- min(40, max(0, a[i] - 5 + b[i-1]))
b
## [1] 0 17 12 9 4 0 15 30 40 35 30

2)减少
f <- function(b, a) min(40, max(0, a - 5 + b))
Reduce(f, a, acc = TRUE)
## [1] 0 17 12 9 4 0 15 30 40 35 30

3) 递归这种递归解决方案将仅限于不太长的输入。
rec <- function(a) {
n <- length(a)
if (n <= 1) a
else {
rec.hd <- Recall(a[-n])
c(rec.hd, min(40, max(0, rec.hd[n-1] + a[n] - 5)))
}
}
rec(a)
## [1] 0 17 12 9 4 0 15 30 40 35 30

关于r - R 中条件的累积和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40996306/

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