【发布时间】:2015-08-10 23:00:24
【问题描述】:
我有一个 data.table 对象,其中列日期和时间存储为 IDate/ITime 对象。我还有一个时区列,其中时区以字符形式给出。
现在我想创建一个使用 POSIXct 格式的 DateTime 列。但是我不知道如何为对象添加正确的时区。
#Create the data.table object
dtData <- data.table(
Index = seq(1,5),
Time= as.ITime(c('16:00', '16:00', '12:30', '16:00', '15:00')),
Date = as.IDate(rep('2015-05-28', 5)),
TimeZone=c('America/New_York', 'America/New_York', 'Europe/London', 'Asia/Hong_Kong', 'Japan'))
#This gives an error of invalid tz value
dtData[, psxDateTime:=as.POSIXct(Date, time = Time, tz = TimeZone)]
#This seem to set every row to Japan time zone
dtData[, psxDateTime:=as.POSIXct(Date, time = Time, tz = TimeZone), by=Index]
print(dtData$psxDateTime)
谁能指出我正确的方向? 谢谢。
编辑:
在阅读了 David Arenburg 和 akrun 的 cmets 之后,似乎无法将具有不同时区的 POSIXct 对象存储在一个 data.table 列中。即使组合一个向量也会改变时区属性:
Date1 <- as.POSIXct('2015-05-28 16:00', tz='America/New_York')
Date2 <- as.POSIXct('2015-05-28 12:00', tz='Japan')
Date3 <- c(Date1, Date2)
print(Date1)
print(Date2)
print(Date3)
【问题讨论】:
-
time = Time是什么?不记得as.POSIXct中的time参数我也怀疑单个POSIXct向量可以同时包含不同的时区。 -
这来自data.table类IDateTime。请参阅inside-r.org/packages/cran/data.table/docs/as.IDate 但是 dtData[, psxDateTime:=as.POSIXct(paste(Date, Time), tz=cTimeZone), by=Index] 也不起作用。
-
它应该可以工作,但正如我所提到的,我怀疑你可以在一个向量中拥有多个时区。
-
正如@DavidArenburg 提到的,如果您需要多个时区,请将其拆分为列表并将它们存储为列表元素。
标签: r data.table posixct