Нахождение совокупного максимума объектов Date - PullRequest
1 голос
/ 21 мая 2019

Я пытаюсь найти кумулятивные максимальные даты для столбца в data.frame.Мои данные выглядят примерно так:

df <- data.frame(id = c(1, 2, 3, 4, 5, 7, 8, 11, 3, 12),
                 date = sample(seq(as.Date("2015-01-01"), as.Date("2017-01-01"), by = "day"), 10))

# > df
   id       date
1  15 2015-11-22
2   2 2016-06-23
3   4 2015-03-21
4   6 2015-04-09
5   5 2015-05-20
6   1 2016-01-03
7  13 2015-01-01
8  14 2016-11-24
9   7 2016-12-23
10  9 2016-08-12

Ожидаемый результат

Я ожидаю, что получится что-то вроде:

# > df
   id       date
1  15 2015-11-22
2   2 2016-06-23
3   4 2016-06-23
4   6 2016-06-23
5   5 2016-06-23
6   1 2016-06-23
7  13 2016-06-23
8  14 2016-11-24
9   7 2016-12-23
10  9 2016-12-23

Мне удалось найти кумулятивные максимумы числовых переменных.с dplyr::cummax(), но эта функция неприменима к Date объектам.Есть ли другая функция, может быть, в базе R, которая будет аналогична cumsum() и может использоваться в датах?

Ответы [ 2 ]

2 голосов
/ 21 мая 2019

Вы также можете использовать zoo::rollapply

df$cum_max_date <- zoo::rollapplyr(df$date, 1:nrow(df), max)

Результаты с set.seed(1) (тот же результат, что и у Зака)

   id       date cum_max_date
1   1 2015-07-14   2015-07-14
2   2 2015-09-30   2015-09-30
3   3 2016-02-23   2016-02-23
4   4 2016-10-24   2016-10-24
5   5 2015-05-27   2016-10-24
6   7 2016-10-15   2016-10-24
7   8 2016-11-16   2016-11-16
8  11 2016-04-24   2016-11-16
9   3 2016-03-31   2016-11-16
10 12 2015-02-14   2016-11-16
2 голосов
/ 21 мая 2019

Вы можете преобразовать в числовое значение и затем преобразовать его обратно, отметив, что класс Date имеет происхождение 1970-01-01:

set.seed(1)
df <- data.frame(id = c(1, 2, 3, 4, 5, 7, 8, 11, 3, 12),
                 date = sample(seq(as.Date("2015-01-01"), as.Date("2017-01-01"), by = "day"), 10))


df$cum_max_date <- as.Date(cummax(as.integer(df$date)), "1970-01-01")

df
#>    id       date cum_max_date
#> 1   1 2015-07-14   2015-07-14
#> 2   2 2015-09-30   2015-09-30
#> 3   3 2016-02-23   2016-02-23
#> 4   4 2016-10-24   2016-10-24
#> 5   5 2015-05-27   2016-10-24
#> 6   7 2016-10-15   2016-10-24
#> 7   8 2016-11-16   2016-11-16
#> 8  11 2016-04-24   2016-11-16
#> 9   3 2016-03-31   2016-11-16
#> 10 12 2015-02-14   2016-11-16

Создано в 2019-05-21 представительный пакет (v0.2.1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...