Entrada rápida para ilustrar cómo crear un campo autonumérico por un factor; es una duda que me plantean: tienen datos de clientes y fechas y necesitan crear un autonumérico en R que les diga el número de orden de los eventos de una fecha. Algo parecido a lo que hacemos con el retain de SAS. Vamos a ilustrar la tarea con un ejemplo:

library(dplyr)
library(lubridate)

clientes <- 100
id_cliente <- rpois(clientes, 10)
fecha <- rpois(clientes, today() - rpois(clientes, 5))

eventos <- cbind.data.frame(id_cliente, fecha)

eventos$fecha <- as.Date(eventos$fecha, origin = "1970-01-01")
eventos <- eventos %>% arrange(id_cliente, fecha)

100 clientes que aparecen una o $n$ veces con fechas asociadas; el primer paso que sugiero hacer es eliminar duplicados con dplyr:

eventos <- eventos %>%
  group_by(id_cliente, fecha) %>%
  filter(row_number() == 1) %>%
  as_tibble()

Agrupamos por cliente y fecha y nos quedamos con el primer registro; en este caso da igual quedarse con el primero que con el último. Ahora que no tenemos duplicados la agrupación ya no es por cliente y por fecha; como vamos a crear un valor agrupado por cliente, haremos el group_by solo por cliente:

eventos <- eventos %>%
  group_by(id_cliente) %>%
  mutate(evento = row_number()) %>%
  as_tibble()

Cada evento irá numerado de 1 a $n$ gracias a row_number(); el mismo se reinicia a 1 cada vez que cambia el valor del group_by.