如何标记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)