我有 8 个小组:
df <- structure(list(group1 = c(1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5, 6,
6, 7, 8, 8)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA,
-16L))
group1
<dbl>
1 1
2 1
3 2
4 2
5 3
6 3
7 4
8 4
9 5
10 5
11 5
12 6
13 6
14 7
15 8
16 8
我如何创建一个新的 group2 将每个连续的 N(假设 N=2)组组合成一个新组,例如:
group1 group2
<dbl> <dbl>
1 1 1
2 1 1
3 2 1
4 2 1
5 3 2
6 3 2
7 4 2
8 4 2
9 5 3
10 5 3
11 5 3
12 6 3
13 6 3
14 7 4
15 8 4
16 8 4
背景: 如果我想用行来做,我会用
df %>%
mutate(Col2 = rep(row_number(), each=2, length.out = n()))
但是我想说
row_number()
而不是group
。
你可以使用
(group1 + N - 1) %/% N
library(dplyr)
N <- 2
df |>
mutate(group = (group1 + N - 1) %/% N)
#> # A tibble: 16 × 2
#> group1 group
#> <dbl> <dbl>
#> 1 1 1
#> 2 1 1
#> 3 2 1
#> 4 2 1
#> 5 3 2
#> 6 3 2
#> 7 4 2
#> 8 4 2
#> 9 5 3
#> 10 5 3
#> 11 5 3
#> 12 6 3
#> 13 6 3
#> 14 7 4
#> 15 8 4
#> 16 8 4
另一个使用
group_by
和 cur_group_id
的选项是这样的:
library(dplyr)
df %>%
group_by(group1) %>%
mutate(Col2 = (cur_group_id() + 1) %/% 2)
#> # A tibble: 16 × 2
#> # Groups: group1 [8]
#> group1 Col2
#> <dbl> <dbl>
#> 1 1 1
#> 2 1 1
#> 3 2 1
#> 4 2 1
#> 5 3 2
#> 6 3 2
#> 7 4 2
#> 8 4 2
#> 9 5 3
#> 10 5 3
#> 11 5 3
#> 12 6 3
#> 13 6 3
#> 14 7 4
#> 15 8 4
#> 16 8 4
创建于 2023-03-14 与 reprex v2.0.2