R语言 如何将连续的N个组合并为一个重复的组

lb3vh1jj  于 2023-03-15  发布在  其他
关注(0)|答案(2)|浏览(147)

我有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()))

但我想说group而不是row_number()

f8rj6qna

f8rj6qna1#

您可以使用(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
dwbf0jvd

dwbf0jvd2#

另一个将group_bycur_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年3月14日,使用reprex v2.0.2

相关问题