在group_by之后的数字重复值时如何实现从r?

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

如何突变一个新变量

row1
将编号重复值
row0
的值,但从1开始,尽管
pdf
更改了,但没有重置? 然后,如何突变一个新变量
page
将将重复值编号为一定值(此处3),从中重复一个给定序列(此处重复从1到2)直到下一个
row2
更一般地是一个函数,包括序列启动的值以及序列的类型(启动值,端值,seq),并且适用于每个组(即使最后一个序列在移动下一个组时也不完整) ?
thanks寻求帮助/建议
既定的输出:

原始数据:
enter image description hererow1

基础r中的实施 pdf

从您可以使用
dat0 <- structure(list(pdf = c("x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "y", "y", "y", "y", "y", "y", "y", "y", "y", "y", "y", "y", "y", "y", "y", "y", "y", "y"), page = c(3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8), row0 = c(5, 5, 5, 5, 6, 6, 6, 7, 7, 1, 1, 1, 2, 2, 2, 2, 3, 2, 2, 3, 3, 3, 4, 4, 1, 1, 1, 1, 2, 2, 2, 3, 1, 1, 2)), class = "data.frame", row.names = c(NA, -35L))
r numbers grouping sequential
1个回答
0
投票
来开发

consecutive_id = function(x) with(rle(x), rep(seq_along(values), lengths)) dat0$row1 = with(dat0, ave(row0, pdf, FUN = consecutive_id)) dat0$row2 = with(rle(dat0$row1), rep(rep(seq(2), length(values) / 2), lengths))

{dplyr}

dplyr::consecutive_id()

> dat0
   pdf page row0 row1 row2
1    x    3    5    1    1
2    x    3    5    1    1
3    x    3    5    1    1
4    x    3    5    1    1
5    x    3    6    2    2
6    x    3    6    2    2
7    x    3    6    2    2
8    x    3    7    3    1
9    x    3    7    3    1
10   x    4    1    4    2
11   x    4    1    4    2
12   x    4    1    4    2
13   x    4    2    5    1
14   x    4    2    5    1
15   x    4    2    5    1
16   x    4    2    5    1
17   x    4    3    6    2
18   y    6    2    1    1
19   y    6    2    1    1
20   y    6    3    2    2
21   y    6    3    2    2
22   y    6    3    2    2
23   y    6    4    3    1
24   y    6    4    3    1
25   y    7    1    4    2
26   y    7    1    4    2
27   y    7    1    4    2
28   y    7    1    4    2
29   y    7    2    5    1
30   y    7    2    5    1
31   y    7    2    5    1
32   y    7    3    6    2
33   y    8    1    7    1
34   y    8    1    7    1
35   y    8    2    8    2

基于您的实际数据,您可能需要减去/添加一行。
	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.