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
with:
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)
你可以这样做(当你同时拥有数据表 and 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
当你不想加载时数据表您还可以单独使用(如@DavidArenburg 在评论中提到的):
DT <- DT %>% mutate(rlid = data.table::rleid(grp))
正如 @RichardSriven 在他的文章中所说comment你可以复制/窃取它:
myrleid <- data.table::rleid
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)