我有一个数据集,数据库中存储的日期是UTC,然而,时区实际上是不同的。
mydat <- data.frame(
time_stamp=c("2022-08-01 05:00:00 UTC","2022-08-01 17:00:00 UTC","2022-08-02 22:30:00 UTC","2022-08-04 05:00:00 UTC","2022-08-05 02:00:00 UTC"),
timezone=c("America/Chicago","America/New_York","America/Los_Angeles","America/Denver","America/New_York")
)
字符串
我想将时区应用于整个列中保存的UTC时间戳。
我查看了lubridate包中的with_tz
函数,但我不知道如何引用“timezone”列,而不是硬编码一个值。
如果我尝试
with_tz(mydat$time_stamp, tzone = mydat$timezone)
型
我得到以下错误
Error in as.POSIXlt.POSIXct(x, tz) : invalid 'tz' value`
型
但是,如果我尝试
mydat$time_stamp2 <- with_tz(mydat$time_stamp,"America/New_York")
型
这将呈现一个新的列没有问题。我怎么能这样做,只是引用列值?
2条答案
按热度按时间gzszwxb41#
以下内容应满足您的要求:
代码
字符串
输出
型
评论
我们首先将你的数据解析为UTC,我曾经在我的anytime包中为此编写了一个帮助函数(有其他方法,但这是我的方法...)。然后我们需要从给定的(数字!!)UTC表示格式化为给定的时区。我们需要一个循环,因为
strftime()
的tz
参数没有矢量化。py49o6xq2#
Dirk给出了一个很好的答案,它使用了(大部分)基本的R工具,如果这是您的要求。我还想添加一个使用我开发的clock包的答案,因为它不需要在 Dataframe 上按行工作。clock有一个名为
sys_time_info()
的函数,用于检索有关特定时区中UTC时间点的低级信息。它是少数几个函数之一,有一个矢量化的zone
参数(这里需要)并返回一个来自UTC的offset
是有意义的,它在这里转换为“本地”时间时很有用。正如其他人所提到的,您将无法构建一个日期-时间向量来存储多个时区,但如果您只需要查看这些时区的本地时间,这仍然很有用。
字符串