有一个dplyr等价于data.table :: rleid? [英] Is there a dplyr equivalent to data.table::rleid?

查看:101
本文介绍了有一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆