Скажите, вот мои данные
mydat=structure(list(ItemRelation = c(11629L, 11629L, 11629L, 11629L,
11629L, 11629L, 11629L, 11629L, 11629L, 11629L, 11629L, 11629L,
11629L, 11629L, 11629L, 11629L, 11629L, 11629L, 11629L, 11629L,
11629L, 11630L, 11630L, 11630L, 11630L, 11630L, 11630L, 11630L,
11630L, 11630L, 11630L, 11630L, 11630L), exp_date_days = c(5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L
), CustomerName = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("ТС", "ТС1"), class = "factor"),
DocumentNum = c(11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L,
11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L,
11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L
), IsPromo = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 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), diff = 1:33), .Names = c("ItemRelation",
"exp_date_days", "CustomerName", "DocumentNum", "IsPromo", "CalendarYear",
"diff"), class = "data.frame", row.names = c(NA, -33L))
У "Испромо" только порядок 0-1-0 !!!
Мне нужно для каждой группы ItemRelation+CustomerName+DocumentNum+CalendarYear
агрегированные данные по сумме согласноусловие.
Если группа по exp_date_days
имеет значение <= 5, то столбец diff должен быть агрегирован по сумме только по 10 нулям, что после одной категории испромо.Если нули меньше 10, то агрегировать по максимальному количеству нулей. </p>
Если группировка по exp_date_days
имеет значение> 5, тогда столбец diff должен агрегировать по сумме только по 15 нулям, чтопосле одной категории испромо.Если нули меньше 15, то агрегировать по максимальному количеству нулей.
Итак, выведите в этом примере
ItemRelation CustomerName DocumentNum CalendarYear diff
11629 ТС 11 2018 126
11630 ТС 11 2018 285
Как это сделать, используя dplyr или data.table?
Редактировать
ItemRelation exp_date_days CustomerName DocumentNum IsPromo CalendarYear diff
11629 5 ТС 11 0 2018 1
11629 5 ТС 11 0 2018 2
11629 5 ТС 11 0 2018 3
11629 5 ТС 11 0 2018 4
11629 5 ТС 11 0 2018 5
11629 5 ТС 11 0 2018 6
11629 5 ТС 11 0 2018 7
11629 5 ТС 11 0 2018 8
11629 5 ТС 11 0 2018 9
11629 5 ТС 11 0 2018 10
11629 5 ТС 11 0 2018 11
11629 5 ТС 11 0 2018 12
11629 5 ТС 11 1 2018 13
11629 5 ТС 11 1 2018 14
**11629 5 ТС 11 0 2018 15
11629 5 ТС 11 0 2018 16
11629 5 ТС 11 0 2018 17
11629 5 ТС 11 0 2018 18
11629 5 ТС 11 0 2018 19
11629 5 ТС 11 0 2018 20
11629 5 ТС 11 0 2018 21** (sum 126)
Редактировать2
ItemRelation exp_date_days CustomerName DocumentNum IsPromo CalendarYear diff
11630 6 ТС1 11 0 2018 22
11630 6 ТС1 11 1 2018 23
**11630 6 ТС1 11 0 2018 24
11630 6 ТС1 11 0 2018 25
11630 6 ТС1 11 0 2018 26
11630 6 ТС1 11 0 2018 27
11630 6 ТС1 11 0 2018 28
11630 6 ТС1 11 0 2018 29
11630 6 ТС1 11 0 2018 30
11630 6 ТС1 11 0 2018 31
11630 6 ТС1 11 0 2018 32
11630 6 ТС1 11 0 2018 33** (285)