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

时间:2017-09-09 18:46:44

标签: 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

   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和朋友一起执行此操作?

1 个答案:

答案 0 :(得分:6)

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