按数据帧中的每个递增序列分组

时间:2018-04-18 11:31:44

标签: r grouping sequence

如果我的数据框中有一列单调递增的值,例如:

x
1
2
3
4
1
2
3
1
2
3
4
5
6
1
2

如何添加列以对导致的每个递增序列进行分组:

x   y
1   1
2   1
3   1
4   1
1   2
2   2
3   2
1   3
2   3
3   3
4   3
5   3
6   3
1   4
2   4

我只能想到使用一个缓慢的循环。

2 个答案:

答案 0 :(得分:3)

您可以选择cumsum功能来执行此操作。

> x <- c(1,2,3,4,1,2,3,1,2,4,5,1,2)
> cumsum(x==1)
 [1] 1 1 1 1 2 2 2 3 3 3 3 4 4

答案 1 :(得分:3)

我会使用diff并计算累积总和:

df$y <- c(1, cumsum(diff(df$x) < 0 ) + 1)

> df
   x y
1  1 1
2  2 1
3  3 1
4  4 1
5  1 2
6  2 2
7  3 2
8  1 3
9  2 3
10 3 3
11 4 3
12 5 3
13 6 3
14 1 4
15 2 4