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

Jac*_*ley -1 r tidyverse

给定这样的数据框:

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 Code Online (Sandbox Code Playgroud)

我想像这样创建一个新列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 Code Online (Sandbox Code Playgroud)

如果我用不同的语言写这个,我的伪代码看起来像这样:

run := 1
if station(previous) >= station(current):
  run := run + 1
Run Code Online (Sandbox Code Playgroud)

tidyr和R 和朋友一起做这个怎么样?

eip*_*i10 6

library(dplyr)

df %>% 
  mutate(run = cumsum(c(TRUE, diff(station)<=0)))
Run Code Online (Sandbox Code Playgroud)
   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 Code Online (Sandbox Code Playgroud)