使用日期计算R中mutate中的lead变量

我正在使用dplyr的mutate函数通过引导另一列来创建数据框的POSIX日期列.当我尝试使用单个日期填写主要功能中的缺失值时,我收到一个错误:

> 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].

这不会发生在变异之外:

> 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"

这里出了什么问题?

最佳答案 我不确定为什么你可以在变异之外提供符号而不是在里面的根本原因,但你可以通过引用和取消引用变量来绕过它.您还可以保存日期以填写为字符,并在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

reprex package(v0.2.0)于2018-10-03创建.

点赞