我在R中有以下数据:
times <- c("2015-03-08 00:00:00", "2015-03-08 01:00:00", "2015-03-08 02:00:00", "2015-03-08 03:00:00")
utcOffsets <- c(2, 1, 1, 1)
mydata <- data.frame(time=times, utcOffset=utcOffsets)
表格中的utcOffset列表示每个数据值的时区偏移量。当我尝试使用strptime函数将数据转换为POSIXct时,我遇到了问题。时间&#34; 2015-03-08 01:00:00&#34;由于某种原因转换为NA。
as.POSIXct(strptime(mydata$time, "%Y-%m-%d %H:%M:%S"))
[1]&#34; 2015-03-08 00:00:00 MST&#34; &#34; 2015-03-08 01:00:00 MST&#34; NA
[4]&#34; 2015-03-08 03:00:00 MDT&#34;
我怀疑夏令时时间有问题,我必须在strptime函数中指定时区。如果我的所有数据的时区都是固定的,则以下代码对我有用:
as.POSIXct(strptime(mydata$time, "%Y-%m-%d %H:%M:%S", tz="Europe/Prague"))
[1]&#34; 2015-03-08 00:00:00 CET&#34; &#34; 2015-03-08 01:00:00 CET&#34; &#34; 2015-03-08 02:00:00 CET&#34; [4]&#34; 2015-03-08 03:00:00 CET&#34;
但是在我的数据中,时区是在我的表的utcOffset列中指定的,例如utcOffset = 1表示GMT + 1或utcOffset = 2表示GMT + 2。当我尝试使用格式&#34; GMT + n&#34;的时区代码时,我收到警告:
as.POSIXct(strptime(mydata$time, "%Y-%m-%d %H:%M:%S", tz="GMT+1"))
[1] "2015-03-08 00:00:00 GMT" "2015-03-08 01:00:00 GMT" "2015-03-08 02:00:00 GMT"
[4] "2015-03-08 03:00:00 GMT"
Warning messages:
1: In strptime(mydata$time, "%Y-%m-%d %H:%M:%S", tz = "GMT+1") :
unknown timezone 'GMT+1'
2: In as.POSIXct.POSIXlt(strptime(mydata$time, "%Y-%m-%d %H:%M:%S", :
unknown timezone 'GMT+1'
3: In as.POSIXlt.POSIXct(x, tz) : unknown timezone 'GMT+1'
如何使用表格中的utcOffset信息将数据转换为POSIXct?
答案 0 :(得分:2)
感谢oshun的评论,我找到了问题的答案:
times <- c("2015-03-08 00:00:00", "2015-03-08 01:00:00", "2015-03-08 02:00:00", "2015-03-08 03:00:00")
utcOffsets <- c(2, 1, 1, 1)
mydata <- data.frame(time=times, utcOffset=utcOffsets)
# convert the times to POSIXct (use UTC as default timezone)
localTimes <- as.POSIXct(times, format="%Y-%m-%d %H:%M:%S", tz="GMT")
mydata$UTCTime <- localTimes + utcOffsets*3600