Это предполагает только одну продажу за продукт
require(tidyverse)
df <- data.frame(product = 'Product A',
month = seq(as.Date('2010-01-01'),
as.Date('2010-10-01'),
by = 'month'
),
onSale = c(rep(0,3), rep(1,4),rep(0,3))
)
df %>%
group_by(product) %>%
summarise(saleStart = month[which.min(month[onSale == 1])],
salend = month[which.max(month[onSale == 1])]
)
Редактировать:
df <- data.frame(product = 'Product A',
month = seq(as.Date('2010-01-01'),
as.Date('2011-09-01'),
by = 'month'
),
onSale = c(rep(0,3), rep(1,4),rep(0,3), rep(1,4),rep(0,3), rep(1,4))
)
df %>%
group_by(product) %>%
mutate(diff = c(0,diff(onSale))) %>%
group_by(product, diff) %>%
filter(diff == 1) %>%
mutate(monthStart = month, monthEnd = month %m+% months(1)) %>%
select(-month,-diff)