我有一个带有三个变量的数据帧,即V1,V2和V3。
import React, { Component, Fragment } from "react";
class Footer extends Component {
render() {
return (
<div style={{ position: "absolute", bottom: 0, width:"100%" }} className="bg-gray-100">
<div className="bg-gray-100 container mx-auto px-6 pt-10 pb-6">
> © Oracle Corp. All rights reserved.
</div>
</div>
);
}
}
export default Footer;
我使用下面给出的代码应用了条件求和:
ts<- c(-2, 4, 3,-5,-5,-7, -8, -2, -3, -5,-7, -8, -9, -2, 1, 2,4)
x<- c(6, 0, 0 ,1, 0, 2, 3,5,7,7,8,2,0, 0, 0 , 0, 0)
y<- c(0, 5, 8, 0, 0 , 0 , 0 , 0 , 0, 0, 0, 0, 0, 7, 9, 12, 0)
ve <- data.frame(V1 = ts, V2 = x, V3 =y)
我必须承认,这段代码为我完成了部分工作,直到遇到负值。因此,我有不同的期望输出( DO )。一旦我在 yt 列中遇到了负值,我想重新开始累积下表中所示的值。
ve$yt<- cumsum(ifelse(ve$V1>0, ve$V2-(ve$V3), ve$V2))
我搜索了类似的问题,但是无法获得解决问题的答案。这些是我尝试解决问题的一些链接:
resetting cumsum if value goes to negative in r
我真诚地要求帮助我解决问题。
答案 0 :(得分:1)
这是您可以执行此操作的一种方法:
ve$DO <- Reduce(function(x,y) pmax(x + y, 0), with(ve, V2-V3*(V1 > 0)), accumulate = TRUE)
ve
V1 V2 V3 DO
1 -2 6 0 6
2 4 0 5 1
3 3 0 8 0
4 -5 1 0 1
5 -5 0 0 1
6 -7 2 0 3
7 -8 3 0 6
8 -2 5 0 11
9 -3 7 0 18
10 -5 7 0 25
11 -7 8 0 33
12 -8 2 0 35
13 -9 0 0 35
14 -2 0 7 35
15 1 0 9 26
16 2 0 12 14
17 4 0 0 14
使用purrr/dplyr
等效:
library(purrr)
library(dplyr)
ve %>%
mutate(DO = accumulate(V2-V3*(V1 > 0), .f = ~pmax(.x + .y, 0)))