У меня есть набор данных, подобный следующему, где «группа» - это переменная группы. Я хочу посчитать количество «следующих» дней по группам, но если это не следующий день, я хочу, чтобы счетчик сбрасывался до одного (как показано в столбце «хочу»). Затем я хочу вернуть максимальный номер столбца «хочу» (как в want2). Буду признателен за предложения!
df<-data.frame(group=c(1, 1, 1, 1, 2, 2, 2),
date=c("2000-01-01", "2000-01-03", "2000-01-04", "2000-01-05", "2000-01-09", "2000-01-10", "2000-01-12"),
want=c(1,1,2,3,1,2,1),
want2=c(3,3,3,3,2,2,2))
бонус часть 2: Спасибо за все отзывы, это было чрезвычайно полезно. Есть ли способ сделать то же самое с дополнительным условием? У меня есть двоичная переменная, и я также хочу, чтобы мой счетчик сбрасывался, когда эта переменная == 0. Вот так:
# group date binary want
#1 1 2000-01-01 1 1
#2 1 2000-01-03 1 1
#3 1 2000-01-04 1 2
#4 1 2000-01-05 0 1
#5 2 2000-01-09 1 1
#6 2 2000-01-10 0 1
#7 2 2000-01-12 1 1
#8 3 2000-01-05 1 1
#9 3 2000-01-06 1 2
#10 3 2000-01-07 1 3
#11 3 2000-01-08 1 4
Я попробовал предложение akrun, которое очень хорошо работало без бинарной переменной, я попытался изменить его, добавив бинарную переменную как часть cumsum, но получаю ошибки:
df %>% group_by(group)
%>% mutate(wantn = rowid(cumsum(c(TRUE, diff(as.Date(date)) !=1 & binary==1)))
Спасибо!