r语言 - 将行分配到数据帧中的3组?



我有以下数据框架:

id
A     
A     
A     
A     
A
B     
B     
B     
B     
B     
B     
C    
C     

我想创建另一个列名为"Group.3"在这一列中,每组的行数以3为单位计算。连续的3行被分配相同的组号,接下来的3行或更少的行(取决于我们是否到达组的末尾)被分配另一个更高的编号。

这是我想要的列的样子:

id  Group.3
A     1
A     1
A     1
A     2
A     2
B     1
B     1
B     1
B     2
B     2
B     2
C     1
C     1

关于如何做到这一点,最好使用包dplyr中的函数group_by和mutate有什么建议吗?

使用group_by和mutate与dplyr,我们可以通过查找每个组中的行号,然后使用模将行号分组为3组来实现这一点:

library(dplyr)
df <- data.frame("id"=c(rep("A",5), rep("B", 6), rep("C",2))
> df %>% group_by(id) %>% mutate(Group.3 = (row_number()-1)%/%3+1)
# A tibble: 13 × 2
# Groups:   id [3]
id    Group.3
<chr>   <dbl>
1 A           1
2 A           1
3 A           1
4 A           2
5 A           2
6 B           1
7 B           1
8 B           1
9 B           2
10 B           2
11 B           2
12 C           1
13 C           1

顺便说一下,发布一个可重复的例子会很有帮助,这样社区就可以快速加载你的数据并开始回答你的问题。

另一种选择是使用gl:

library(dplyr)
df %>% 
group_by(id) %>% 
mutate(Group.3 = as.integer(gl(n(), 3, n())))
id    Group.3
<chr>   <int>
1 A           1
2 A           1
3 A           1
4 A           2
5 A           2
6 B           1
7 B           1
8 B           1
9 B           2
10 B           2
11 B           2
12 C           1
13 C           1

最新更新