Вычисление ведущей переменной в mutate в R с датами - PullRequest
0 голосов
/ 04 октября 2018

Я использую функцию dplyr mutate для создания столбца даты POSIX фрейма данных, взяв на себя инициативу другого столбца.Когда я пытаюсь заполнить пропущенные значения в функции lead, используя одну дату, я получаю сообщение об ошибке:

> dates
# A tibble: 5 x 1
  orig_date          
  <dttm>             
1 2016-06-21 20:00:00
2 2016-07-09 22:00:00
3 2016-07-10 22:00:00
4 2016-07-20 21:00:00
5 2016-07-21 21:00:00

> fillin_date
[1] "2018-08-29 UTC"

> dates %>% mutate(next_date = lead(orig_date, 1, default = fillin_date))

Error in mutate_impl(.data, dots) : 
  Not compatible with requested type: [type=symbol; target=double].

Это не происходит вне mutate:

> lead(dates$orig_date, 1, default = fillin_date)
[1] "2016-07-09 22:00:00 UTC" "2016-07-10 22:00:00 UTC" "2016-07-20 21:00:00 UTC"
[4] "2016-07-21 21:00:00 UTC" "2018-08-29 00:00:00 UTC"

Что здесь не так?

1 Ответ

0 голосов
/ 04 октября 2018

Я не уверен относительно основной причины, по которой вы можете поставить символ вне mutate, но не внутри, но вы можете обойти его, заключив в кавычки и сняв кавычки с переменной.Вы также можете сохранить свою дату, чтобы заполнить ее как символ и просто конвертировать в дату внутри вызова mutate.

library(tidyverse)
df <- tibble(orig_date = c("2016-06-21 20:00:00", "2016-07-09 22:00:00", "2016-07-10 22:00:00", "2016-07-20 21:00:00", "2016-07-21 21:00:00")) %>%
  mutate(orig_date = as.POSIXct(orig_date))

fillin_date <- as.POSIXct("2018-08-29")
fillin_date2 <- "2018-08-29"
df %>%
  mutate(next_date = lead(orig_date, 1, default = !!quo(fillin_date)))
#> # A tibble: 5 x 2
#>   orig_date           next_date          
#>   <dttm>              <dttm>             
#> 1 2016-06-21 20:00:00 2016-07-09 22:00:00
#> 2 2016-07-09 22:00:00 2016-07-10 22:00:00
#> 3 2016-07-10 22:00:00 2016-07-20 21:00:00
#> 4 2016-07-20 21:00:00 2016-07-21 21:00:00
#> 5 2016-07-21 21:00:00 2018-08-29 00:00:00
df %>%
  mutate(next_date = lead(orig_date, 1, default = as.POSIXct(fillin_date2)))
#> # A tibble: 5 x 2
#>   orig_date           next_date          
#>   <dttm>              <dttm>             
#> 1 2016-06-21 20:00:00 2016-07-09 22:00:00
#> 2 2016-07-09 22:00:00 2016-07-10 22:00:00
#> 3 2016-07-10 22:00:00 2016-07-20 21:00:00
#> 4 2016-07-20 21:00:00 2016-07-21 21:00:00
#> 5 2016-07-21 21:00:00 2018-08-29 00:00:00

Создано в 2018-10-03 пакетом Представить (v0.2.0).

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