【问题标题】:How to calculate number of days between two dates in R如何计算R中两个日期之间的天数
【发布时间】:2018-11-29 23:27:57
【问题描述】:

我试图在 R 中减去两个日期。这是通过结构命令的两个日期:

str(standard_data_4testing$start_datetime)
 POSIXct[1:489124], format: "2016-02-01 00:38:49" "2016-02-01 07:48:53" "2016-02-01 08:32:08" "2016-02-01 11:21:13" ...

str(standard_data_4testing$original_installdate)
 Date[1:489124], format: "2015-10-15" "2015-10-15" "2015-10-15" "2016-01-29" "2016-01-29" "2016-01-29" ...

我在 R 中使用 as.Date 函数创建了这两个函数,但 start_datetime 有日期和时间,而 original_installdate 在原始数据中只有日期,如上所示。

有没有办法减去它们?

我尝试使用以下语句进行减法:

standard_data_4testing$start_datetime - standard_data_4testing$original_installdate

但我收到此错误:

警告消息:“-”的方法不兼容(“-.POSIXt”、“-.Date”)

打印出一些数据后:

[6049] "2016-02-01 09:48:44 UTC" "2016-02-01 07:24:08 UTC" "2016-02-01 09:02:33 UTC" "2016-02-01 09:14:29 UTC" [6053] "2016-02-01 10:49:46 UTC" "2016-02-01 19:07:52 UTC" "2016-02-01 02:39:04 UTC" "2016-02-01 03:59:29 UTC" [6057] "2016-02-01 07:13:05 UTC" "2016-02-01 07:58:50 UTC" 不适用

我也尝试过使用 POSIXct,但收到了类似的错误。

有什么方法可以减去这两个日期,尽管它们的组成部分不同?

【问题讨论】:

  • 第一种格式的时间分量可以忽略吗?
  • 消息说其中一个是`POSIxt`,另一个是Date。如果它们是同一类,则可以减去。
  • DatamineR - 这是一个有趣的想法。我将尝试在定义它时将其删除 .asDate 并查看是否有帮助。我试过了,但仍然收到同样的错误:警告消息:“-”的不兼容方法(“-.POSIXt”,“-.Date”)
  • @Jazzmine:不要用str,用dput给我们一个可复现的例子
  • 无论如何,您可以使用difftime 函数difference <- difftime(dates1,dates2,units='days'),并使用as.numeric(difference) 获取数字(注意difftime 它会自动将日期转换为POSIXct)

标签: r


【解决方案1】:

首先将两个日期转换为POSIXct 类。请务必在同一时区进行计算,POSIXt 类默认为您的语言环境时区,as.Date 在从字符转换为日期时不使用时区。

test1 <- as.Date("2016-01-01")
test2 <- strptime("2016-01-02", format="%Y-%m-%d", tz="UTC")
difftime(as.POSIXct(test2), as.POSIXct(test1, tz="UTC"), units="days")
# Time difference of 1 days

当将日期从POSIXct 转换为Date 时,始终明确给出时区作为参数,因为as.Date.POSIXct 似乎忽略了POSIXct 对象中的时区,正如您在此示例中看到的那样(这可能是平台依赖):

x <- as.POSIXct("2020-02-22 00:05", tz="CET")
as.Date(x)
as.Date(x, tz="UTC")
as.Date(x, tz="CET")

【讨论】:

  • as.Date.character 没有 tz 参数,该值被完全忽略。我不确定我会说 as.Date 默认为 UTC,而是 R 中的 Date 类完全不知道时区。
  • 谢谢,我在tz 参数上添加了一些信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-26
  • 2010-10-07
  • 2015-02-26
相关资源
最近更新 更多