Ниже на графике данных показан календарь продвижения для продуктов, то есть, с какой недели начинается продвижение, какие продукты продвигаются и как долго продвижение.
Мне нужна функция, которая создаст флаг (по PromoID и StartWk), указывающийесли дублируется комбинация Product-WeekNum, где WeekNum от (StartWk) до (StartWk + Duration).Таким образом, WeekNum для первого ряда - 5-я и 6-я недели (и так далее).По сути, если дублируется любая комбинация Product-WeekNum, то соответствующая комбинация PromoID-StartWk помечается.WeekNum отображается в виде комментариев R.
Если таких экземпляров нет, функция должна вывести пустой фрейм данных с полями вывода.
Очень желательно - пустой фрейм данных, переданный в функцию, должен создать пустой фрейм данныхс полями вывода.
Если это помогает, любой заданный PromoID всегда будет иметь одинаковый набор продуктов и одинаковую длительность во всех случаях.
df <- structure(list(PromoID = c("A", "A", "A", "A", "B", "B", "C",
"C", "D", "A", "A", "E", "E"), Product = c("Flavored", "Original",
"Flavored", "Original", "Flavored", "Original", "Flavored", "Original",
"Flavored", "Flavored", "Original", "Energy", "Energy"), StartWk = c(5L,
5L, 21L, 21L, 30L, 30L, 6L, 6L, 5L, 5L, 5L, 49L, 49L), Duration = c(2L,
2L, 2L, 2L, 3L, 3L, 1L, 1L, 2L, 2L, 2L, 1L, 1L)), .Names = c("PromoID",
"Product", "StartWk", "Duration"), class = "data.frame", row.names = c(NA,
-13L))
PromoID Product StartWk Duration
1 A Flavored 5 2 # WeekNum 5, 6
2 A Original 5 2 # WeekNum 5, 6
3 A Flavored 21 2 # WeekNum 21, 22
4 A Original 21 2 # WeekNum 21, 22
5 B Flavored 30 3 # WeekNum 30, 31, 32
6 B Original 30 3 # WeekNum 30, 31, 32
7 C Flavored 6 1 # WeekNum 6
8 C Original 6 1 # WeekNum 6
9 D Flavored 5 2 # WeekNum 5, 6
10 A Flavored 5 2 # WeekNum 5, 6
11 A Original 5 2 # WeekNum 5, 6
12 E Energy 49 1 # WeekNum 49
13 E Energy 49 1 # WeekNum 49
Ожидаемый результат -
PromoID StartWk Flag
1 A 5 1
2 C 6 1
3 D 5 1
4 E 49 1