是否有相当于data.table:rleid的dplyr?

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)


牧羊人nacy
浏览 569回答 3
3回答

HUWWW

你可以做(当你两者兼备的时候)数据表和dplyr(已装载):DT&nbsp;<-&nbsp;DT&nbsp;%>%&nbsp;mutate(rlid&nbsp;=&nbsp;rleid(grp))这意味着:>&nbsp;DT &nbsp;&nbsp;&nbsp;&nbsp;grp&nbsp;value&nbsp;rlid&nbsp;1:&nbsp;&nbsp;&nbsp;A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;1 &nbsp;2:&nbsp;&nbsp;&nbsp;A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;1 &nbsp;3:&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;2 &nbsp;4:&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;2 &nbsp;5:&nbsp;&nbsp;&nbsp;C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;3 &nbsp;6:&nbsp;&nbsp;&nbsp;C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;3 &nbsp;7:&nbsp;&nbsp;&nbsp;C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp;3 &nbsp;8:&nbsp;&nbsp;&nbsp;A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;4 &nbsp;9:&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp;510:&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;5当你不想装载数据表另外,您还可以使用(如@DavidArenburg在注释中提到的):DT&nbsp;<-&nbsp;DT&nbsp;%>%&nbsp;mutate(rlid&nbsp;=&nbsp;data.table::rleid(grp))你可以复制/窃取它:myrleid&nbsp;<-&nbsp;data.table::rleid

慕斯709654

如果你只想用R和dplyr,更好的方法是将您自己的一两行版本的rleid()作为一个函数,然后在需要的时候应用它。library(dplyr)myrleid <- function(x) {&nbsp; &nbsp; x <- rle(x)$lengths&nbsp; &nbsp; rep(seq_along(x), times=x)}## Try it outDT <- DT %>% mutate(rlid = myrleid(grp))DT#&nbsp; &nbsp;grp value rlid# 1:&nbsp; &nbsp;A&nbsp; &nbsp; &nbsp;1&nbsp; &nbsp; 1# 2:&nbsp; &nbsp;A&nbsp; &nbsp; &nbsp;2&nbsp; &nbsp; 1# 3:&nbsp; &nbsp;B&nbsp; &nbsp; &nbsp;3&nbsp; &nbsp; 2# 4:&nbsp; &nbsp;B&nbsp; &nbsp; &nbsp;4&nbsp; &nbsp; 2# 5:&nbsp; &nbsp;C&nbsp; &nbsp; &nbsp;5&nbsp; &nbsp; 3# 6:&nbsp; &nbsp;C&nbsp; &nbsp; &nbsp;6&nbsp; &nbsp; 3# 7:&nbsp; &nbsp;C&nbsp; &nbsp; &nbsp;7&nbsp; &nbsp; 3# 8:&nbsp; &nbsp;A&nbsp; &nbsp; &nbsp;8&nbsp; &nbsp; 4# 9:&nbsp; &nbsp;B&nbsp; &nbsp; &nbsp;9&nbsp; &nbsp; 5#10:&nbsp; &nbsp;B&nbsp; &nbsp; 10&nbsp; &nbsp; 5

饮歌长啸

您可以使用lag功能来自dplyr.DT&nbsp;<- &nbsp;&nbsp;&nbsp;&nbsp;DT&nbsp;%>% &nbsp;&nbsp;&nbsp;&nbsp;mutate(rleid&nbsp;=&nbsp;(grp&nbsp;!=&nbsp;lag(grp,&nbsp;1,&nbsp;default&nbsp;=&nbsp;"asdf")))&nbsp;%>% &nbsp;&nbsp;&nbsp;&nbsp;mutate(rleid&nbsp;=&nbsp;cumsum(rleid))施予>&nbsp;DT &nbsp;&nbsp;&nbsp;&nbsp;grp&nbsp;value&nbsp;rleid&nbsp;1:&nbsp;&nbsp;&nbsp;A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 &nbsp;2:&nbsp;&nbsp;&nbsp;A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 &nbsp;3:&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2 &nbsp;4:&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2 &nbsp;5:&nbsp;&nbsp;&nbsp;C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3 &nbsp;6:&nbsp;&nbsp;&nbsp;C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3 &nbsp;7:&nbsp;&nbsp;&nbsp;C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3 &nbsp;8:&nbsp;&nbsp;&nbsp;A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4 &nbsp;9:&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;510:&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5
打开App,查看更多内容
随时随地看视频慕课网APP