如何标记R中连续图案的组?

如何标记R中连续图案的组?,r,label,R,Label,我试着给每个小组贴标签。这是数据集 group 1 p01 2 p01 3 p01 4 p01 5 p02 6 p01 7 p01 8 p01 9 p02 10 p02 11 p01 12 p01 结构(列表)组=结构(c(1L,1L,1L,1L,2L,1L,1L, 2L,2L,1L,1L),.Label=c(“p01”,“p02”),class=“factor”)),class= “data.frame”,row.nam

我试着给每个小组贴标签。这是数据集

   group
1    p01
2    p01
3    p01
4    p01
5    p02
6    p01
7    p01
8    p01
9    p02
10   p02
11   p01
12   p01
结构(列表)组=结构(c(1L,1L,1L,1L,2L,1L,1L, 2L,2L,1L,1L),.Label=c(“p01”,“p02”),class=“factor”)),class= “data.frame”,row.names=c(NA, -(12升)

这是一张预期的表格。对于p01,考虑连续模式时,预期列为1-4,然后是2-6-8,3-11-12

   group new_group
1    p01         1
2    p01         1
3    p01         1
4    p01         1
5    p02         1
6    p01         2
7    p01         2
8    p01         2
9    p02         2
10   p02         2
11   p01         3
12   p01         3
如何在r中使用dplyr实现这一点?

就是这样吗

x%>%
变异(新组=累积值(组=“p01”和滞后(组!=“p01”,默认值=真)))
#新集团
#1 p01 1
#2 p01 1
#3 p01 1
#4 p01 1
#5 p02 1
#6 P012
#7 P012
#8 P012
#9 p02 2
#10 p02 2
#11 P013
#12 P013

我们可以创建一个列,其中包含
行编号()
,并且对于每个
每当行的差值大于1时,递增计数器

library(dplyr)

df %>%
  mutate(row = row_number()) %>%
  group_by(group) %>%
  mutate(new_group = cumsum(row - lag(row, default = first(row)) > 1) + 1) %>%
  select(-row)

#   group new_group
#   <fct>     <dbl>
# 1 p01           1
# 2 p01           1
# 3 p01           1
# 4 p01           1
# 5 p02           1
# 6 p01           2
# 7 p01           2
# 8 p01           2
# 9 p02           2
#10 p02           2
#11 p01           3
#12 p01           3
另一种可能性:

库(dplyr)
#> 
#>正在附加包:“dplyr”
#>以下对象已从“package:stats”屏蔽:
#> 
#>滤波器,滞后
#>以下对象已从“package:base”屏蔽:
#> 
#>相交、setdiff、setequal、并集
df%
变异(新组=带有(rle(作为整数(组)),代表(沿着(长度)的序列))%>%
分组依据(分组)%>%
转换(新组=as.integer(as.factor(新组)))%>%
解组()
#>#tibble:12 x 2
#>新集团
#>         
#>1 p01 1
#>2 p01 1
#>3 p01 1
#>4 p01 1
#>5 p02 1
#>6 P012
#>7 P012
#>8 P012
#>9 p02 2
#>10 p02 2
#>11 P013
#>12 P013

<2019-08-12(V0.3.0)

<代码> RLE 在这里可能是有用的。我会考虑的。谢谢。基于您提供的示例数据,并且没有任何新分组逻辑的解释,我认为我很好地再现了您的预期输出。请做两件事:(1)提供更可变的数据样本;(2)讨论做这件事时必须考虑的逻辑。我向你道歉,我会这么做。我真的很抱歉。不需要道歉,真的,只是尝试改进MWE以更好地代表您的需求。
df %>%
  mutate(row = row_number()) %>%
  group_by(group) %>%
  mutate(new_group = cumsum(c(TRUE, diff(row) > 1))) %>%
  select(-row)