使用 lubridate 从连续增量中获取 dates/times

Using lubridate to get dates/times from continuous increments

我正在尝试使用 lubridate 来处理使用 ode 求解的微分方程的结果。我的模拟从某个日期 (01-01-2021) 开始,并且按天计算(一个单位时间的增加等于一天的日历时间增加)。我如何使用 lubridate 来处理自模拟开始以来的连续双倍时间?

例如,我想从左栏转到右栏:

ODE time Calendar Time
0.0 01-01-2021 00:00
0.5 01-01-2021 12:00
1.0 01-02-2021 00:00

等...

谢谢

您可以直接将秒数添加到开始日期:

ODETime <- seq(0,10,by=0.5)
calendarTime <- as.POSIXct("2021-01-01 00:00") + ODETime * 86400
calendarTime

 [1] "2021-01-01 00:00:00 CET" "2021-01-01 12:00:00 CET" "2021-01-02 00:00:00 CET"
 [4] "2021-01-02 12:00:00 CET" "2021-01-03 00:00:00 CET" "2021-01-03 12:00:00 CET"
 [7] "2021-01-04 00:00:00 CET" "2021-01-04 12:00:00 CET" "2021-01-05 00:00:00 CET"
[10] "2021-01-05 12:00:00 CET" "2021-01-06 00:00:00 CET" "2021-01-06 12:00:00 CET"
[13] "2021-01-07 00:00:00 CET" "2021-01-07 12:00:00 CET" "2021-01-08 00:00:00 CET"
[16] "2021-01-08 12:00:00 CET" "2021-01-09 00:00:00 CET" "2021-01-09 12:00:00 CET"
[19] "2021-01-10 00:00:00 CET" "2021-01-10 12:00:00 CET" "2021-01-11 00:00:00 CET"

lubridate:

as.POSIXct("2021-01-01 00:00") + lubridate::period(24,'hour') * ODETime
 [1] "2021-01-01 00:00:00 CET" "2021-01-01 12:00:00 CET" "2021-01-02 00:00:00 CET"
 [4] "2021-01-02 12:00:00 CET" "2021-01-03 00:00:00 CET" "2021-01-03 12:00:00 CET"
 [7] "2021-01-04 00:00:00 CET" "2021-01-04 12:00:00 CET" "2021-01-05 00:00:00 CET"
[10] "2021-01-05 12:00:00 CET" "2021-01-06 00:00:00 CET" "2021-01-06 12:00:00 CET"
[13] "2021-01-07 00:00:00 CET" "2021-01-07 12:00:00 CET" "2021-01-08 00:00:00 CET"
[16] "2021-01-08 12:00:00 CET" "2021-01-09 00:00:00 CET" "2021-01-09 12:00:00 CET"
[19] "2021-01-10 00:00:00 CET" "2021-01-10 12:00:00 CET" "2021-01-11 00:00:00 CET"

我不确定我是否理解你的问题。但是从您的示例来看,您似乎想要创建时间步长。我理解正确的话,“一个单位”是增加24小时,而半天是增加12小时。您的数据框示例表明您希望将其放在 dataframe/tibble.

使用 {lubridate},您可以“强制”日期时间戳。有一些方便的时间格式化函数。你可以从一个角色转到一个时间戳。 例如

# create dataframe/tibble of ODE and Calendar times
   mydata <- tribble(
  ~ODE_time, ~Calendar_Time
 ,0.0      , "01-01-2021 00:00"
 ,0.5      , "01-01-2021 12:00"
 ,1.0      , "01-02-2021 00:00"
 ,1.5      , "01-02-2021 12:00"
)

mydata <- mydata %>%
  mutate(time = lubridate::mdy_hm(Calendar_Time))

在您的例子中,我使用 mdy_hm() 函数来制作时间戳 (dttm) 对象。 我将它分配给 variable/column 时间,以便您可以查看 R/RStudio 中的演示文稿。

我从你的问题中得到的是你想要创建一个时间戳序列。 在这里您可以使用 seq() 函数并使用时间偏移量,在您的情况下为 12 小时(或半天)。我将长度限制为 10 ... 你显然可以定义更长的序列或确定你的结束日期(即 seq() 的参数)

date_time_seq <- seq( from      = lubridate::mdy_hm("01-01-2021 00:00")
                     ,length.out = 10,
                     ,by = "12 hours")

这为您提供了一系列时间戳

date_time_seq [1] "2021-01-01 00:00:00 UTC" "2021-01-01 12:00:00 UTC" "2021-01-02 00:00:00 UTC" [4] "2021-01-02 12:00:00 UTC" "2021-01-03 00:00:00 UTC" "2021-01-03 12:00:00 UTC" [7] "2021-01-04 00:00:00 UTC" "2021-01-04 12:00:00 UTC" "2021-01-05 00:00:00 UTC"
[10] "2021-01-05 12:00:00 UTC"

语法允许您添加各种“步骤”,您可以使用不同时间单位的增量,例如分钟、小时、天、周等 您可以在 dataframe/tibble 中操作此时间步矢量并执行其他操作。

祝你好运!