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
我可以R
用以下方式来模仿:
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
是否有人知道dplyr
等效项(?)或创建rleid
行为的“最佳”方法dplyr
是执行以下操作
library(dplyr)
my_rleid = rep(seq_along(rle(df$grp)$values), times = rle(df$grp)$lengths)
df %>%
mutate(rleid = my_rleid)
您可以这样做(当同时加载了data.table和dplyr时):
DT <- DT %>% mutate(rlid = rleid(grp))
这给出了:
> DT grp value rlid 1: A 1 1 2: A 2 1 3: B 3 2 4: B 4 2 5: C 5 3 6: C 6 3 7: C 7 3 8: A 8 4 9: B 9 5 10: B 10 5
当您不想单独加载data.table时,也可以使用(如@DavidArenburg在评论中所述):
DT <- DT %>% mutate(rlid = data.table::rleid(grp))
正如@RichardScriven在他的评论中所说,您可以复制/窃取它:
myrleid <- data.table::rleid
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句