我对R中的as.POSIXct感到困惑。
我使用以下代码将列中的值转换为包含日期和时间的一列。
fname$DateTime <- as.POSIXct(paste(fname$yy, fname$mm, fname$dd, fname$HH, fname$MM), format = "%y %m %d %H %M")
然后,我为绘图设定了时间限制。
lims <- as.POSIXct(strptime(c("2015-10-23 4:00","2015-10-23 16:00"), format = "%Y-%m-%d %H:%M"))
Temp <- ggplot(DF, aes(x=DateTime, y=Temp)) + geom_line(aes(x=DateTime, y=Temp),colour="blue", alpha = 0.8) + scale_x_datetime(limits =lims, breaks=date_breaks("1 hour"), labels=date_format("%m/%d %H:%M")) + facet_wrap( ~ ID, ncol=4)
Temp + geom_vline(xintercept=as.numeric(as.POSIXct("2015-10-23 10:30")), linetype=4, colour="purple")
时间序列从10月23日08:00开始,而不是10/23 4:00;结束于10/23 20:00而不是10/23 16:00。垂直线显示在10/23 14:30而不是10/23 10:30。这是一个4小时的时间班!
那是怎么回事?如何在数据框中显示DateTime显示的正确时间序列?请帮我!
感谢。
答案 0 :(得分:5)
如果您在未指定时区的情况下使用as.POSIXct
,则会假定您输入的时间是utc,并且还假设您希望将它们转换为本地时区。为什么它使这些经常错误的假设超出我的范围...
试试as.POSIXct(..., tz=<enter your timezone>)
如果您不知道自己的时区,Sys.timezone(location = TRUE)
会告诉您时区是什么。