【发布时间】: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")才能使您的代码可重现。