使用 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 中操作此时间步矢量并执行其他操作。
祝你好运!
我正在尝试使用 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 中操作此时间步矢量并执行其他操作。
祝你好运!