data.table
oferuje ładne funkcji wygodę, rleid
:Czy istnieje odpowiednik dplyr dla 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
mogę naśladować ten w bazie R
z: (?)
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
Czy ktoś wie o dplyr
równoważne lub jest "najlepszy" sposób, aby utworzyć zachowanie rleid
z dplyr
jest zrobić coś jak następuje
library(dplyr)
my_rleid = rep(seq_along(rle(df$grp)$values), times = rle(df$grp)$lengths)
df %>%
mutate(rleid = my_rleid)
Dplyr jest kompatybilny z data.table. Jeśli, z jakiegoś powodu, nie chcesz ładować data.table, myślę, że twoje podstawowe rozwiązanie jest dobre. Możesz spróbować zgłosić żądanie funkcji dplyr, ale powiedziałbym, że szanse na dobry odbiór nie są lepsze niż 50/50. – Frank
'cumsum (c (1L, df $ grp [-nrow (df)]! = Df $ grp [-1]))' również dla bazy – rawr