data.table
offre una bella funzione convenienza, rleid
:Esiste un dplyr equivalente a data.table :: rleid?
library(data.table)
DT = data.table(grp=rep(c("A", "B", "C", "A", "B"), c(2, 2, 3, 1, 2)), value=1:10)
rleid(DT$grp)
# [1] 1 1 2 2 3 3 3 4 5 5
posso imitare questo nella base di R
con: (?)
df <- data.frame(DT)
rep(seq_along(rle(df$grp)$values), times = rle(df$grp)$lengths)
# [1] 1 1 2 2 3 3 3 4 5 5
Qualcuno sa di un dplyr
equivalente o è il "migliore" modo per creare il comportamento rleid
con dplyr
è di fare qualcosa di simile al seguente
library(dplyr)
my_rleid = rep(seq_along(rle(df$grp)$values), times = rle(df$grp)$lengths)
df %>%
mutate(rleid = my_rleid)
Dplyr è compatibile con data.table. Se, per qualche ragione, non vuoi caricare data.table, penso che la tua soluzione di base sia buona. Potresti provare a presentare una richiesta di funzione con dplyr, ma direi che le probabilità di una buona ricezione non sono migliori di 50/50. – Frank
'cumsum (c (1L, df $ grp [-nrow (df)]! = Df $ grp [-1]))' anche per la base – rawr