在 R 中将字符和 UTC 偏移量转换为 POSIXct
Convert character and UTC offset to POSIXct in R
我在 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)
我的table中的utcOffset列表示每个数据值的时区偏移量。当我尝试使用 strptime 函数将我的数据转换为 POSIXct 时,我遇到了问题。由于某些原因,时间“2015-03-08 01:00:00”被转换为 NA。
as.POSIXct(strptime(mydata$time, "%Y-%m-%d %H:%M:%S"))
[1] "2015-03-08 00:00:00 MST" "2015-03-08 01:00:00 MST" NA
[4] "2015-03-08 03:00:00 MDT"
我怀疑夏令时有问题,我必须在 strptime 函数中指定时区。如果我所有数据的时区都是固定的,则以下代码对我有用:
as.POSIXct(strptime(mydata$time, "%Y-%m-%d %H:%M:%S", tz="Europe/Prague"))
[1] "2015-03-08 00:00:00 中欧" "2015-03-08 01:00:00 中欧" "2015-03-08 02:00:00 中欧"
[4] "2015-03-08 03:00:00中欧
然而,在我的数据中,时区在我的 table 的 utcOffset 列中指定,例如 utcOffset=1 表示 GMT+1 或 utcOffset=2 表示 GMT+2。当我尝试使用 "GMT+n" 格式的时区代码时,我收到警告:
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'
如何使用 table 中的 utcOffset 信息将我的数据转换为 POSIXct?
感谢 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
我在 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)
我的table中的utcOffset列表示每个数据值的时区偏移量。当我尝试使用 strptime 函数将我的数据转换为 POSIXct 时,我遇到了问题。由于某些原因,时间“2015-03-08 01:00:00”被转换为 NA。
as.POSIXct(strptime(mydata$time, "%Y-%m-%d %H:%M:%S"))
[1] "2015-03-08 00:00:00 MST" "2015-03-08 01:00:00 MST" NA
[4] "2015-03-08 03:00:00 MDT"
我怀疑夏令时有问题,我必须在 strptime 函数中指定时区。如果我所有数据的时区都是固定的,则以下代码对我有用:
as.POSIXct(strptime(mydata$time, "%Y-%m-%d %H:%M:%S", tz="Europe/Prague"))
[1] "2015-03-08 00:00:00 中欧" "2015-03-08 01:00:00 中欧" "2015-03-08 02:00:00 中欧" [4] "2015-03-08 03:00:00中欧
然而,在我的数据中,时区在我的 table 的 utcOffset 列中指定,例如 utcOffset=1 表示 GMT+1 或 utcOffset=2 表示 GMT+2。当我尝试使用 "GMT+n" 格式的时区代码时,我收到警告:
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'
如何使用 table 中的 utcOffset 信息将我的数据转换为 POSIXct?
感谢 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