【问题标题】:lubridate [R]: difference between a date and now() to be added to a datelubridate [R]: 日期和 now() 之间的差异被添加到日期
【发布时间】:2020-09-16 07:59:47
【问题描述】:

我在使用 lubridate 时有点挣扎

我过去在 df$mydate 变量中有一个日期系列作为 POSIXct。我想将max(df$mydate)now() 中减去,然后从该时间间隔中再减去 2 天 - 即,使间隔比该系列的最新日期与今天之间的差短 2 天。然后应该将获得的时间间隔添加到 df$mydate 中的所有日期,以便将日期块提前到从今天开始的过去 2 天。

如何使用 lubridate 做到这一点?

当我尝试将 now() - max(df$mydate) 转换为区间时,我得到一个空区间。所以我什至没有进入第 2 步 - 将间隔缩短 2 天和第 3 步 - 尝试将这个时间长度添加到我拥有的日期中。

【问题讨论】:

  • 请提供一个可重现的例子

标签: r intervals lubridate


【解决方案1】:

带有 lubridate 的 Idee 会为您处理间隔和日期之间的所有转换,因此您无需考虑它。这个简单的代码正是你想要的。

library(lubridate)

my_date <-as.POSIXlt(paste0("2009-08-",1:10))
time_diff <- now() - max(my_date)
time_diff_short = time_diff - 2
my_date + time_diff_short

我发现你需要 my_date 的格式为POSIXlt

【讨论】:

  • 谢谢,我的数据是Posixct
【解决方案2】:

您可以使用 base 中的difftime 得到与现在 Sys.time() 的时差并减去 2 天。

x <- x + (difftime(Sys.time(), max(x), units = "days") - 2)
x
#[1] "2020-09-11 10:32:20 CEST" "2020-09-12 10:32:20 CEST"
#[3] "2020-09-13 10:32:20 CEST" "2020-09-14 10:32:20 CEST"

Sys.time()
#[1] "2020-09-16 10:32:20 CEST"

数据:

(x <- seq(as.POSIXct("2000-01-01 12:00:00"), length.out = 4, by = "days"))
#[1] "2000-01-01 12:00:00 CET" "2000-01-02 12:00:00 CET"
#[3] "2000-01-03 12:00:00 CET" "2000-01-04 12:00:00 CET"

【讨论】:

  • 非常感谢,这也很好用。并且不需要润滑。
猜你喜欢
  • 2017-06-27
  • 1970-01-01
  • 1970-01-01
  • 2011-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多