使用R [duplicate]将序列号分组

kknvjkwl  于 2023-03-27  发布在  其他
关注(0)|答案(1)|浏览(132)

此问题在此处已有答案

How to combine consecutive N groups to one group each repetitive(3个答案)
6天前关闭。
谁能告诉我一种把成对的数字组合成集合的方法。

g a set
1  a 1 1
2  a 2 1
3  b 1 1
4  b 2 1
5  c 1 1
6  c 2 1
7  c 3 2
8  c 4 2
9  d 1 1
10 d 2 1
11 e 1 1
12 e 2 1
13 e 3 2
14 e 4 2
15 e 5 3
16 e 6 3

这里每个组g都有一个计数器a。在a中,1和2被设置为1,3和4被设置为2,5和6被设置为3,等等。有没有一种方法可以将集合的计算形式化为a增加到任何数字?如果有,R中的什么工具可以帮助实现这一点?
我试过在dply:group_by()中使用cumsum,但这显然是不正确的

df <- df %>% group_by(g) %>% mutate(set = cumsum(a))

   g         a   set
   <chr> <dbl> <dbl>
 1 a         1     1
 2 a         2     3
 3 b         1     1
 4 b         2     3
 5 c         1     1
 6 c         2     3
 7 c         3     6
 8 c         4    10
 9 d         1     1
10 d         2     3
11 e         1     1
12 e         2     3
13 e         3     6
14 e         4    10
15 e         5    15
16 e         6    21
s4n0splo

s4n0splo1#

我想你可以在这里使用一些模运算。从a中减去1,然后找到除以2后的整数部分。在此加上1即可得到结果。

df %>% mutate(set = (a - 1) %/% 2 + 1)
#>    g a set
#> 1  a 1   1
#> 2  a 2   1
#> 3  b 1   1
#> 4  b 2   1
#> 5  c 1   1
#> 6  c 2   1
#> 7  c 3   2
#> 8  c 4   2
#> 9  d 1   1
#> 10 d 2   1
#> 11 e 1   1
#> 12 e 2   1
#> 13 e 3   2
#> 14 e 4   2
#> 15 e 5   3
#> 16 e 6   3

相关问题