По моим данным
#EDIT DPUT
mydat=structure(list(ItemRelation = c(11202L, 11202L, 11202L, 11202L,
11202L, 11202L, 11202L, 11202L, 11202L, 11202L, 11202L, 11202L,
11202L, 11202L, 11202L, 11202L, 11202L, 11202L, 11202L, 11202L,
11202L, 11202L, 11202L, 11202L, 11202L, 11202L, 11202L, 11202L,
11202L, 11202L, 11202L, 11202L, 11202L, 11202L, 11202L, 11202L,
11202L, 11202L, 11202L, 11202L, 11202L, 11202L, 11202L, 11202L,
11202L, 11202L, 11202L, 11202L, 11202L, 11202L, 11202L, 11202L,
11202L, 11202L, 11202L, 11202L, 11202L, 11202L, 11202L, 11202L,
11202L, 11202L, 11202L, 11202L, 11202L, 11202L, 11202L, 11202L,
11202L, 11202L, 11202L, 11202L, 11202L, 11202L, 11202L, 11202L,
11202L, 11202L, 11202L, 11202L, 11202L, 11202L, 11202L, 11202L,
11202L, 11202L, 11202L, 11202L, 11202L, 11202L, 11202L, 11202L,
11202L, 11202L, 11202L, 11202L, 11202L, 11202L, 11202L, 11202L,
11202L, 11202L, 11202L, 11202L), ReturnCount = c(0L, 2L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 3L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L,
0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 3L, 0L, 0L, 0L,
0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L), DocumentNum = c(514L, 514L, 514L, 514L,
514L, 514L, 514L, 514L, 514L, 514L, 514L, 514L, 514L, 514L, 514L,
514L, 514L, 514L, 514L, 514L, 514L, 514L, 514L, 514L, 514L, 514L,
514L, 514L, 514L, 514L, 514L, 514L, 514L, 514L, 514L, 514L, 514L,
514L, 514L, 514L, 514L, 514L, 514L, 514L, 514L, 514L, 514L, 514L,
514L, 514L, 514L, 514L, 896L, 896L, 896L, 896L, 896L, 896L, 896L,
896L, 896L, 896L, 896L, 896L, 896L, 896L, 896L, 896L, 896L, 896L,
896L, 896L, 896L, 896L, 896L, 896L, 896L, 896L, 896L, 896L, 896L,
896L, 896L, 896L, 896L, 896L, 896L, 896L, 896L, 896L, 896L, 896L,
896L, 896L, 896L, 896L, 896L, 896L, 896L, 896L, 896L, 896L, 896L,
896L), IsPromo = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), CalendarYear = c(2018L,
2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L,
2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L,
2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L,
2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L,
2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L,
2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L,
2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L,
2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L,
2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L,
2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L,
2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L,
2018L, 2018L, 2018L, 2018L), output = c(0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, NA, NA, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, NA, NA, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L)), .Names = c("ItemRelation", "ReturnCount", "DocumentNum",
"IsPromo", "CalendarYear", "output"), class = "data.frame", row.names = c(NA,
-104L))
У меня есть групповые переменные
ItemRelation DocumentNum
11202 514
11202 96
Есть колонка Испромо. Может принимать значения только 0 и 1.
Таким образом, ReturnCount является числовой переменной.
Мне нужно заменить значения выходного столбца на значения returncount which go before 1 category of ispromo
.
Это означает, что значения по нулевой категории испромо, которые идут перед одной категорией испромо, для столбцов returncount и output должны быть одинаковыми.
НО, значения этих столбцов for zero category of ispromo AFTER one category
мы не трогаем.
Как это сделать для каждой группы ItemRelation + DocumentNum?
Привести к желаемому выводу
Изменить ожидаемый результат
ItemRelation ReturnCount DocumentNum IsPromo output
1 11202 0 514 0 0
2 11202 2 514 0 **2**
3 11202 0 514 0 0
4 11202 0 514 0 0
5 11202 0 514 0 0
6 11202 0 514 0 0
7 11202 0 514 0 0
8 11202 0 514 0 0
9 11202 0 514 0 0
10 11202 0 514 0 0
11 11202 1 514 0 **1**
12 11202 0 514 0 0
13 11202 1 514 0 **1**
14 11202 1 514 0 **1**
15 11202 0 514 0 0
16 11202 0 514 0 0
17 11202 0 514 0 0
18 11202 0 514 0 0
19 11202 0 514 0 0
20 11202 0 514 0 0
21 11202 0 514 0 0
22 11202 0 514 0 0
23 11202 0 514 0 0
24 11202 0 514 0 0
25 11202 0 514 0 0
26 11202 0 514 0 0
27 11202 0 514 0 0
28 11202 1 514 0 **1**
29 11202 0 514 0 0
30 11202 0 514 0 0
31 11202 0 514 0 0
32 11202 0 514 0 0
33 11202 0 514 0 0
34 11202 0 514 0 0
35 11202 0 514 0 0
36 11202 0 514 1 <NA>
37 11202 0 514 1 <NA>
38 11202 0 514 0 0
39 11202 0 514 0 0
40 11202 0 514 0 0
41 11202 3 514 0 0
42 11202 0 514 0 0
43 11202 0 514 0 0
44 11202 0 514 0 0
45 11202 0 514 0 0
46 11202 1 514 0 1
47 11202 1 514 0 1
48 11202 0 514 0 0
49 11202 0 514 0 0
50 11202 0 514 0 0
51 11202 0 514 0 0
52 11202 0 514 0 0
53 11202 1 896 0 **1**
54 11202 0 896 0 0
55 11202 0 896 0 0
56 11202 0 896 0 0
57 11202 0 896 0 0
58 11202 0 896 0 0
59 11202 0 896 0 0
60 11202 0 896 0 0
61 11202 0 896 0 0
62 11202 0 896 0 0
63 11202 0 896 0 0
64 11202 0 896 0 0
65 11202 0 896 0 0
66 11202 0 896 0 0
67 11202 1 896 0 **1**
68 11202 0 896 0 0
69 11202 0 896 0 0
70 11202 0 896 0 0
71 11202 0 896 0 0
72 11202 0 896 0 0
73 11202 0 896 0 0
74 11202 0 896 0 0
75 11202 0 896 0 0
76 11202 0 896 0 0
77 11202 0 896 0 0
78 11202 0 896 0 0
79 11202 0 896 0 0
80 11202 3 896 0 **3**
81 11202 0 896 0 0
82 11202 0 896 0 0
83 11202 0 896 0 0
84 11202 0 896 0 0
85 11202 1 896 0 **1**
86 11202 1 896 0 **1**
87 11202 0 896 0 0
88 11202 0 896 1 <NA>
89 11202 0 896 1 <NA>
90 11202 0 896 0 0
91 11202 0 896 0 0
92 11202 0 896 0 0
93 11202 0 896 0 0
94 11202 0 896 0 0
95 11202 0 896 0 0
96 11202 0 896 0 0
97 11202 0 896 0 0
98 11202 0 896 0 0
99 11202 0 896 0 0
100 11202 0 896 0 0
101 11202 0 896 0 0
102 11202 0 896 0 0
103 11202 0 896 0 0
104 11202 0 896 0 0
** помечается значениями выпуска по нулевой категории испромо перед одной категорией испромо. То есть мы берем значение returncount в этой строке и заменяем его значением вывода в этой строке.
2 11202 2 514 0 **2**
для второй строки returncount = 2, поэтому 0 на выходе заменяется на него.
Обратите внимание, что эта операция выполняется только для нулевой категории испромо до 0 новой категории. После одной категории мы не касаемся нулевой категории.