首页 > 解决方案 > 在 R 中为日期添加一天

问题描述

我有一个包含两列出发时间和到达时间的数据框。我想将到达时间与出发时间进行比较,如果到达时间大于出发时间,则将其加 1。

departuretime         arrivaltime
<S3: POSIXct>         <S3: POSIXct>
2019-03-04 23:32:00 2019-03-04 03:55:00         
2019-03-05 01:38:00 2019-03-04 05:27:00         
2019-03-04 22:59:00 2019-03-04 06:45:00         
2019-03-04 22:40:00 2019-03-04 00:01:00         
2019-03-04 22:13:00 2019-03-04 00:08:00         
2019-03-04 22:38:00 2019-03-04 00:08:00         
2019-03-05 00:36:00 2019-03-04 04:19:00         
2019-03-04 22:12:00 2019-03-04 00:19:00         
2019-03-04 23:19:00 2019-03-04 02:13:00         
2019-03-04 21:27:00 2019-03-04 00:21:00

我试过下面的代码

 mutate(if(departuretime > arrivaltime) {
    arrivaltime = ymd_hms(arrivaltime) + days(1)
  })

但这似乎没有任何区别。我不确定为什么。

标签: rlubridate

解决方案


使用ifelse矢量化:

library(dplyr)
library(lubridate)

df %>%
   mutate(arrivaltime = ifelse(departuretime > arrivaltime, 
                           arrivaltime + days(1), arrivaltime))

或在基础 R 中:

transform(df, arrivaltime = ifelse(departuretime > arrivaltime, 
                               arrivaltime + 86400, arrivaltime))

推荐阅读