首页 > 解决方案 > 使 R/lubridate 在几天内持续输出

问题描述

我正在处理日期,我想创建一个专栏来说明事件发生前的天数。然后我想过滤天数。我注意到 lubridate 偶尔会改变我身上的单位(有时是几天,有时是几小时),所以我想让我的代码明确表示我想要它在几天内。

这是一个示例数据集:

library(dplyr)
library(lubridate)
problem <- tibble(location = c("Atlanta, GA", "New York City, NY", "San Francisco, CA"),
                  travel_date = ymd_hms(c("2018-12-17 02:30:00", "2019-7-17 02:30:00", "2020-12-20 09:30:00")))

为了明确表示我需要几天后的单位,我尝试使用 round_date():

problem %>%
  mutate(days_to_deadline = round_date(travel_date - now(), unit = "day")) %>%
  filter(days_to_deadline <= 100 & days_to_deadline >= 0) 

但我收到此错误:

Error in as.POSIXct.default(x) : 
  do not know how to convert 'x' to class “POSIXct”

在这种情况下,此代码有效:

problem %>%
  mutate(days_to_deadline = round(travel_date - now())) %>%
  filter(days_to_deadline <= days(50) & days_to_deadline >= 0) 

但同样,我已经看到单位根据输入的内容而变化,所以我想保证 R 是在几天内而不是任何其他时间单位内读取的。

标签: rdatetimedplyrlubridate

解决方案


推荐阅读