如何将连续的N组合并为一组每次重复

问题描述 投票:0回答:2

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

r sequence group
2个回答
2
投票

你可以使用

(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

1
投票

另一个使用

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

© www.soinside.com 2019 - 2024. All rights reserved.