是否有等效于 data.table::rleid 的 dplyr? [英] Is there a dplyr equivalent to data.table::rleid?

查看:11
本文介绍了是否有等效于 data.table::rleid 的 dplyr?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

data.table 提供了一个很好的便利功能,rleid 用于运行长度编码:

库(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)代表(seq_along(rle(df$grp)$values),次=rle(df$grp)$lengths)# [1] 1 1 2 2 3 3 3 4 5 5

有谁知道 dplyr 等价物 (?) 或者是使用 dplyr 创建 rleid 行为的最佳"方法是执行以下操作

库(dplyr)my_rleid = rep(seq_along(rle(df$grp)$values), times = rle(df$grp)$lengths)df %>%变异(rleid = my_rleid)

解决方案

你可以这样做(当你同时拥有 已加载):

DT <- DT %>% mutate(rlid = rleid(grp))

这给出了:

<块引用>

<代码>>DTgrp 值 rlid1:一个 1 12:A 2 13:乙 3 24:乙 4 25:C 5 36:C 6 37:C 7 38:一个 8 49:乙 9 510:乙 10 5

当你不想加载 你也可以单独使用(正如@DavidArenburg 在评论中提到的那样):

DT <- DT %>% mutate(rlid = data.table::rleid(grp))

正如@RichardScriven 在他的评论中所说,你可以复制/窃取它:

myrleid <- data.table::rleid

data.table offers a nice convenience function, rleid for run-length encoding:

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

I can mimic this in base 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

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)

解决方案

You can just do (when you have both and loaded):

DT <- DT %>% mutate(rlid = rleid(grp))

this gives:

> 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

When you don't want to load separately you can also use (as mentioned by @DavidArenburg in the comments):

DT <- DT %>% mutate(rlid = data.table::rleid(grp))

And as @RichardScriven said in his comment you can just copy/steal it:

myrleid <- data.table::rleid

这篇关于是否有等效于 data.table::rleid 的 dplyr?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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