Условный расчет на основе двух столбцов, включая задержку даты в R - PullRequest
1 голос
/ 03 апреля 2020

У меня есть датафрейм df со столбцами Date, Inlow и Outflow. Я хочу вычислить столбец «Выход» так, чтобы, если входное значение было больше 1000, выходное значение было равно сумме «оттока» каждой из трех последних дат (перед входным значением> = 1000).

df<-data.frame(Date=c("2019-05-13 EEST", "2019-05-13 EEST", "2019-05-13 EEST", "2019-05-13 EEST",
                              "2019-05-12 EEST", "2019-05-12 EEST", "2019-05-12 EEST", "2019-05-12 EEST",
                              "2019-05-12 EEST", "2019-05-12 EEST", "2019-05-11 EEST","2019-05-10 EEST",
                              "2019-05-10 EEST", "2019-05-10 EEST", "2019-05-10 EEST", "2019-05-10 EEST",
                              "2019-05-10 EEST", "2019-05-10 EEST", "2019-05-10 EEST", "2019-05-10 EEST",
                              "2019-05-10 EEST", "2019-05-10 EEST", "2019-05-10 EEST", "2019-05-10 EEST",
                              "2019-05-10 EEST", "2019-05-10 EEST", "2019-05-10 EEST", "2019-05-10 EEST",
                              "2019-05-10 EEST", "2019-05-10 EEST", "2019-05-10 EEST", "2019-05-10 EEST",
                              "2019-05-10 EEST", "2019-05-10 EEST", "2019-05-10 EEST", "2019-05-10 EEST",
                              "2019-05-09 EEST", "2019-05-09 EEST", "2019-05-09 EEST", "2019-05-09 EEST",
                              "2019-05-09 EEST"),
                              Inflow=c(0, 0, 0,500, 0,80, 0, 0, 0,38, 0, 0, 0,50, 0, 0, 0, 0, 0, 0, 0, 0,
                              0, 0, 0,  100, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 1400, 0,  100, 0, 0),
                              Outflow= c(-40, -30, -30, 0, -14.35, 0, -66, -28, -10, 0,-50, -50, -3.99,0,
                              -50, -25, -25,-50,-50, -100, -100, -50, -46, -50, -50, 0, -50,-50,-50,-100,
                              -100, -100, -100, -100, -100, -100, 0, -100, 0, -100, -75))

Вывод, который мне нужен в случае вышеприведенных примеров, будет после обнаружения притока в сумме 1400 каждый. + (- 100) = - 1499; lag2 Отток = -50; Отток lag3 = -14,35 + 0 + ... + 0 = -89,65

output<- data.frame(Date=c("2019-05-13 EEST","2019-05-13 EEST","2019-05-13 EEST", "2019-05-13 EEST",
                       "2019-05-12 EEST", "2019-05-12 EEST", "2019-05-12 EEST", "2019-05-12 EEST",
                       "2019-05-12 EEST", "2019-05-12 EEST", "2019-05-11 EEST", "2019-05-10 EEST",
                       "2019-05-10 EEST", "2019-05-10 EEST", "2019-05-10 EEST", "2019-05-10 EEST",
                       "2019-05-10 EEST", "2019-05-10 EEST", "2019-05-10 EEST", "2019-05-10 EEST",
                       "2019-05-10 EEST", "2019-05-10 EEST", "2019-05-10 EEST", "2019-05-10 EEST",
                       "2019-05-10 EEST", "2019-05-10 EEST", "2019-05-10 EEST", "2019-05-10 EEST",
                       "2019-05-10 EEST", "2019-05-10 EEST", "2019-05-10 EEST", "2019-05-10 EEST",
                       "2019-05-10 EEST", "2019-05-10 EEST", "2019-05-10 EEST", "2019-05-10 EEST",
                       "2019-05-09 EEST", "2019-05-09 EEST", "2019-05-09 EEST", "2019-05-09 EEST",
                       "2019-05-09 EEST"),Inflow=c(0, 0, 0,500, 0,80, 0, 0, 0,38, 0, 0, 0,50, 0, 0, 
                         0, 0, 0, 0, 0, 0,  0, 0, 0,  100, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 1400, 0, 100,
                         0, 0),
                         Outflow= c(-40, -30, -30, 0, -14.35, 0, -66, -28, -10, 0,-50, -50, -3.99, 0,
                         -50, -25, -25,-50,-50, -100, -100, -50, -46, -50, -50, 0, -50,-50,-50, -100,
                         -100, -100, -100, -100, -100, -100, 0, -100, 0, -100, -75), 
                         Output=c(0,0,0,0,-89.65,-89.65,-89.65,-89.65,-89.65,-89.65,-89.65,-50,
                         -1499,-1499, -1499,-1499,-1499,-1499, -1499,-1499,-1499, -1499,-1499,-1499,
                         -1499,-1499,-1499, -1499,-1499,-1499,-1499, -1499,-1499, -1499,-1499,-1499,
                         -1499,0,0,0,0))

Ожидаемый результат:

 output
   Date              Inflow Outflow Output
1  2019-05-13 EEST      0  -40.00     0.00
2  2019-05-13 EEST      0  -30.00     0.00
3  2019-05-13 EEST      0  -30.00     0.00
4  2019-05-13 EEST    500    0.00     0.00
5  2019-05-12 EEST      0  -14.35   -89.65
6  2019-05-12 EEST     80    0.00   -89.65
7  2019-05-12 EEST      0  -66.00   -89.65
8  2019-05-12 EEST      0  -28.00   -89.65
9  2019-05-12 EEST      0  -10.00   -89.65
10 2019-05-12 EEST     38    0.00   -89.65
11 2019-05-11 EEST      0  -50.00   -89.65
12 2019-05-10 EEST      0  -50.00   -50.00
13 2019-05-10 EEST      0   -3.99 -1499.00
14 2019-05-10 EEST     50    0.00 -1499.00
15 2019-05-10 EEST      0  -50.00 -1499.00
16 2019-05-10 EEST      0  -25.00 -1499.00
17 2019-05-10 EEST      0  -25.00 -1499.00
18 2019-05-10 EEST      0  -50.00 -1499.00
19 2019-05-10 EEST      0  -50.00 -1499.00
20 2019-05-10 EEST      0 -100.00 -1499.00
21 2019-05-10 EEST      0 -100.00 -1499.00
22 2019-05-10 EEST      0  -50.00 -1499.00
23 2019-05-10 EEST      0  -46.00 -1499.00
24 2019-05-10 EEST      0  -50.00 -1499.00
25 2019-05-10 EEST      0  -50.00 -1499.00
26 2019-05-10 EEST    100    0.00 -1499.00
27 2019-05-10 EEST      0  -50.00 -1499.00
28 2019-05-10 EEST      0  -50.00 -1499.00
29 2019-05-10 EEST      0  -50.00 -1499.00
30 2019-05-10 EEST      0 -100.00 -1499.00
31 2019-05-10 EEST      0 -100.00 -1499.00
32 2019-05-10 EEST      0 -100.00 -1499.00
33 2019-05-10 EEST      0 -100.00 -1499.00
34 2019-05-10 EEST      0 -100.00 -1499.00
35 2019-05-10 EEST      0 -100.00 -1499.00
36 2019-05-10 EEST      0 -100.00 -1499.00
37 2019-05-09 EEST   1400    0.00 -1499.00
38 2019-05-09 EEST      0 -100.00     0.00
39 2019-05-09 EEST    100    0.00     0.00
40 2019-05-09 EEST      0 -100.00     0.00
41 2019-05-09 EEST      0  -75.00     0.00

Я знаю, как выполнять условные вычисления с помощью dplyr с одним условным столбцом, но я не разобрался с двумя столбцами с задержкой. Буду признателен за вашу помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...