按另一列中的更改对数据进行分组

Grouping data by change in another column

给定一个这样的数据框:

station <- c(1, 2, 3, 1, 2, 3, 1, 2, 2, 2)
obs <- c(12.3, 10.4, 9.8, 15.9, 8.2, 8.4, 6.3, 10.2, 9.0, 8.3)
df <- data.frame(station, obs)

我想像这样创建一个新列 run

   station  obs run
1        1 12.3   1
2        2 10.4   1
3        3  9.8   1
4        1 15.9   2
5        2  8.2   2
6        3  8.4   2
7        1  6.3   3
8        2 10.2   3
9        2  9.0   4
10       2  8.3   5

如果我用不同的语言来写,我的伪代码会是这样的:

run := 1
if station(previous) >= station(current):
  run := run + 1

如何在 R 中与 tidyr 和朋友一起做这件事?

library(dplyr)

df %>% 
  mutate(run = cumsum(c(TRUE, diff(station)<=0)))
   station  obs run
1        1 12.3   1
2        2 10.4   1
3        3  9.8   1
4        1 15.9   2
5        2  8.2   2
6        3  8.4   2
7        1  6.3   3
8        2 10.2   3
9        2  9.0   4
10       2  8.3   5