有一个dplyr等价于data.table :: rleid? [英] Is there a dplyr equivalent to data.table::rleid?
本文介绍了有一个dplyr等价于data.table :: rleid?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
data.table
提供了一个非常方便的函数, rleid
:
data.table
offers a nice convenience function, 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
是做如下
Does anyone know of a dplyr
equivalent (?) or is the "best" way to create the rleid
behavior with dplyr
is to do something like the following
library(dplyr)
my_rleid = rep(seq_along(rle(df$grp)$values), times = rle(df$grp)$lengths)
df %>%
mutate(rleid = my_rleid)
推荐答案
你可以做(当你同时拥有 data.table
和 dplyr
loaded):
You can just do (when you have both data.table
and dplyr
loaded):
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
DT <- DT %>% mutate(rlid = data.table::rleid(grp))
正如@RichardScriven评论你可以复制/偷取它:
And as @RichardScriven said in his comment you can just copy/steal it:
myrleid <- data.table::rleid
这篇关于有一个dplyr等价于data.table :: rleid?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文