示例数据:

test <- structure(list(date1 = structure(c(1632745800, 1632745800), tzone = "UTC", class = c("POSIXct", 
"POSIXt")), date2 = structure(c(1641468180, 1641468180), tzone = "UTC", class = c("POSIXct", 
"POSIXt"))), row.names = c(NA, -2L), class = c("tbl_df", "tbl", 
"data.frame"))

为什么Difftime的输出会因为输入是否被包装成as.character而不同?例如:

library(tidyverse)

test <- structure(list(date1 = structure(c(1632745800, 1632745800), 
                                         tzone = "UTC", class = c("POSIXct", "POSIXt")), 
                       date2 = structure(c(1641468180, 1641468180), tzone = "UTC", class = c("POSIXct", "POSIXt"))), 
                  row.names = c(NA, -2L), class = c("tbl_df", "tbl", "data.frame"))

test %>% mutate(date_diff = difftime(date2, date1, units = "days"), 
date_diff2 = difftime(as.character(date2), as.character(date1), units = "days")) %>% 
  print.data.frame()
#>                 date1               date2     date_diff    date_diff2
#> 1 2021-09-27 12:30:00 2022-01-06 11:23:00 100.9535 days 100.9951 days
#> 2 2021-09-27 12:30:00 2022-01-06 11:23:00 100.9535 days 100.9951 days

在这种情况下,它只相差0.04,但有什么原因吗?哪一个会被认为是正确的?谢谢!

推荐答案

转换为字符是有损失的,因为您丢失了时区信息. 您的原始日期时间指定为UTC格式.如果你 使用as.character()并重新解析它们,它们会被解释为您的当地时间, 其中一个日期似乎使用夏令时,另一个不使用夏令时,导致额外的一小时差异.

x <- as.POSIXct(1632745800, tz = "UTC")
y <- as.POSIXct(1641468180, tz = "UTC")

x
#> [1] "2021-09-27 12:30:00 UTC"
as.character(x)
#> [1] "2021-09-27 12:30:00"
as.POSIXct(as.character(x))
#> [1] "2021-09-27 12:30:00 BST"
as.POSIXct(as.character(y))
#> [1] "2022-01-06 11:23:00 GMT"

R相关问答推荐

使用na.locf在长格式数据集中输入具有多个时间点的数据集

根据选中三个复选框中的一个或两个来调整绘图

在特定Quarto(reveal.js)幻灯片上隐藏徽标

R根据条件进行累积更改

使用R闪光显示所有数据点作为默认设置

对于变量的每个值,仅 Select 包含列表中所有值的值.R

从所有项的 struct 相同的两级列表中,将该第二级中的所有同名项绑定在一起

R中的哈密顿滤波

线性模型斜率在减少原始数据时提供NA

R spatstat Minkowski Sum()返回多个边界

有没有办法使用ggText,<;Sub>;&;<;sup>;将上标和下标添加到同一元素?

如何在科学记数法中显示因子

TreeNode打印 twig 并为其上色

基于Key->Value数据帧的基因子集相关性提取

R如何将列名转换为更好的年和月格式

如何使用FormC使简单算术运算得到的数字是正确的?

使用列中的值来调用函数调用中应使用的其他列

是否有一个R函数可以输出在输入的字符向量中找到的相应正则表达式模式?

conditionPanel不考虑以下条件

如何捕获这个shiny 的、可扩展的react 性用户输入矩阵作为另一个react 性对象,以便进一步操作?