【问题标题】:dates change after combining vectors of dates in R在R中组合日期向量后日期发生变化
【发布时间】:2016-04-25 22:52:22
【问题描述】:

我正在尝试将两个日期向量组合成一个向量。我一直在使用 lubridate 包中的日期。

首先我创建两个日期向量:

library(lubridate)

mydate <- mdy("04/01/2016")
mydate_range <- mydate + (1:12)*months(1)

anotherdate_range <- mdy("05/01/2017") + (1:12)*months(1)

检查 mydate_range 和 anotherdate_range 这些似乎工作正常。

但是当我尝试将这些组合成一个向量时,事情变得很奇怪。

combineddates <- c(mydate_range, anotherdate_range)
combineddates
[1] "2016-04-30 19:00:00 CDT" "2016-05-31 19:00:00 CDT" "2016-06-30 19:00:00 CDT"

combineddates 的第一个日期现在是“2016-04-30”。在我使用 c() 函数组合它们之前,mydate_range 的第一个日期是“2016-05-01”。

不知道为什么会发生这种变化。我应该如何加入这些日期向量?

【问题讨论】:

  • 你是如何通过组合两个 Date 对象得到 POSIXct/lt 日期时间的?我无法复制你的例子。
  • 我同意@thelatemail,无法复制。对我来说很好,我得到Date[1:24], format: "2016-05-01" "2016-06-01" "2016-07-01" "2016-08-01" "2016-09-01" ...

标签: r date vector lubridate


【解决方案1】:

日期更改的原因是由于时区调整导致的转换。 2016-04-30 19:00:00 CDT 与 2016-05-01 GMT 相同。您的初始序列很可能是在格林威治标准时间,并且在转换为当地时间的过程中的某个地方。 我发现最好在初始定义中定义时区,并且始终保持一致。

【讨论】:

  • 虽然这可能是原因,但据我所知,R 的基本 Date 对象没有与之关联的时区。在某个地方,OP 已将事物转换为日期时间,我猜可能是 POSIXct 对象。
  • 我没有使用足够的 lubridate 来很好地理解它。但是如果附加了时间段,ymd 将返回一个 POSIX 对象。
  • 实际上我看到在组合日期向量后时区发生了变化,即使时区在原始两个中指定并且是相同的。它也正在获得一个时间戳。我正在使用 lubridate,您绝对应该使用它,但即使 lubridate 也不完美。我的快速解决方法是转换为字符,组合向量,转换回具有正确时区的日期并且不重新指定时间戳。这个答案似乎是一个显而易见的解决方案,但不幸的是,带有日期的东西从来都不是显而易见的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-06
  • 1970-01-01
  • 1970-01-01
  • 2015-05-05
  • 2023-03-24
  • 2021-11-25
相关资源
最近更新 更多