【问题标题】:POSIXct in R, bug?R中的POSIXct,错误?
【发布时间】:2019-12-10 10:29:20
【问题描述】:

为什么会有不同?

db$Produktionsanfang[1]="2019-01-07 06:10:00"
> x = as.numeric(as.POSIXct(db$Produktionsanfang,origin="1970-01-01", tz ="CET"))
> x[1]
[1] 1546815600
> as.POSIXct(1546815600,origin="1970-01-01")
[1] "2019-01-07 CET"

> as.numeric(as.POSIXct(db$Produktionsanfang[1],origin="1970-01-01",tz="CET"))
[1] 1546837800
> as.POSIXct(1546837800,origin="1970-01-01")
[1] "2019-01-07 06:10:00 CET"

> dput(head(db["Produktionsanfang"], 2))
structure(list(Produktionsanfang = c("2019-01-07 06:10:00", "2019-01-08 06:39:00"
)), row.names = 1:2, class = "data.frame")

看起来 data.frame 操作会导致错误?第二个输出是正确的。

问题是x = as.numeric(as.POSIXct(db$Produktionsanfang,origin="1970-01-01", tz ="CET")) 正在将“值”“2019-01-07 06:10:00”四舍五入为“2019-01-07”,以及下一个值“2019-01-08 06:39” :00" 到 "2019-01-08"(以及 df 之外的所有值)。除了运行这段代码,我不是这样。

主题How can I keep midnight (00:00h) using strptime() in R? 不是关于这个问题的。

谁能解释一下?谢谢

【问题讨论】:

  • 请提供可重现的数据。 dput(head(db["Produktionsanfang"], 2)) 应该够了。
  • 是不是因为 as.POSIXct() 在第一个示例中舍入到一天,因为 1546815600 正好是 24 小时周期?
  • dput(head(db["Produktionsanfang"], 2)): structure(list(Produktionsanfang = c("2019-01-07 06:10:00", "2019-01-08 06:39:00")), row.names = 1:2, class= "data.frame")
  • 您需要使用as.POSIXct(..., tz = "CET") 才能使您的代码可重现。

标签: r posixct


【解决方案1】:

正如上面@xilliam 所说,当时间戳对应于午夜打印时时,as.POSIXct 会丢弃 HH:MM。小时和分钟仍然保存。

例如

format(as.POSIXct(1546815600,origin="1970-01-01", tz='CET'), '%Y-%m-%d %M:%H')

[1] "2019-01-07 00:00"

【讨论】:

    猜你喜欢
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 2020-11-26
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多