如何突变一个新变量
row1
将编号重复值row0
的值,但从1开始,尽管pdf
更改了,但没有重置?
然后,如何突变一个新变量page
将将重复值编号为一定值(此处3),从中重复一个给定序列(此处重复从1到2)直到下一个row2
?更一般地是一个函数,包括序列启动的值以及序列的类型(启动值,端值,seq),并且适用于每个组(即使最后一个序列在移动下一个组时也不完整) ?
thanks寻求帮助/建议
既定的输出:
原始数据:
row1
基础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))
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
基于您的实际数据,您可能需要减去/添加一行。