Мы можем использовать от dplyr
до group_by
id
и возвращать 0 для первого date
, в противном случае вернуть счетчик появления 1-го date
library(dplyr)
df %>%
group_by(id) %>%
mutate(count = ifelse(date == date[1L], 0, sum(date == date[1L])))
# id date count
# <dbl> <fct> <dbl>
#1 1 01/01/2018 0
#2 1 01/01/2018 0
#3 1 02/01/2018 2
#4 2 03/02/2018 0
#5 2 04/04/2018 1
Или используябаза R ave
с аналогичной логикой
as.numeric(with(df, ave(date, id, FUN = function(x)
ifelse(x == x[1L], 0, sum(x == x[1L])))))
#[1] 0 0 2 0 1
данные
df <- data.frame(id = c(1, 1, 1, 2, 2), date = c("01/01/2018", "01/01/2018",
"02/01/2018", "03/02/2018", "04/04/2018"), stringsAsFactors = FALSE)