r-在一个数据帧列中使用多个时区



我有一个由8个不同数据集组成的大数据帧,下面是三个不同时区的样本。我导入数据,然后将8个数据帧合并到一个df中。我希望能够对整个数据集或其中的部分进行分析和ggplot,使Date_time时区对每个区域都正确。

我最近发现,R中的数据帧显然不支持一列中有多个时区,所以使用rbind添加的以下所有df都会占用第一个数据的时区(df$Date_time从导入值更改(,我尝试了不同的方法来克服这个问题:

  1. 将数据帧保存为列表,并创建8个列表的列表,可以在listx$Date_time中保持本地时区的正确性,但ggplot不允许从列表中绘图,当我转换回数据帧时,时区都会再次更改。

  2. 我创建了df$tz列,以在文件中包含每个时区,我尝试了这个:创建固定UTC时间的解决方案,但这是一个字符串df$UTC,我不知道如何使R和ggplot使用正确的时区信息绘制数据。

df$Date对不同时区保持为true,因为时间被剥离,而df$time_ser在日期被剥离时保持正确。

我需要在每次分析中包含一个函数来计算实际的本地时间吗?这非常耗时,或者有其他方法可以做到这一点。

具有三个时区的示例数据帧"df":

> df
Date_time Depth       Date time_ser                     UTC               tz
1  2013-10-14 12:30:00 64.45 2013-10-14 12:30:00 2013-10-14 03:30:00 UTC       Asia/Tokyo
2  2013-10-14 12:30:05 65.95 2013-10-14 12:30:05 2013-10-14 03:30:05 UTC       Asia/Tokyo
3  2013-10-14 12:30:10 65.95 2013-10-14 12:30:10 2013-10-14 03:30:10 UTC       Asia/Tokyo
4  2013-10-14 12:30:15 66.45 2013-10-14 12:30:15 2013-10-14 03:30:15 UTC       Asia/Tokyo
5  2013-10-14 12:30:20 67.95 2013-10-14 12:30:20 2013-10-14 03:30:20 UTC       Asia/Tokyo
6  2013-10-14 12:30:25 66.95 2013-10-14 12:30:25 2013-10-14 03:30:25 UTC       Asia/Tokyo
31 2018-05-09 04:11:39  0.00 2018-05-08 14:11:39 2018-05-08 19:11:39 UTC     America/Lima
32 2018-05-09 04:11:42  0.00 2018-05-08 14:11:42 2018-05-08 19:11:42 UTC     America/Lima
33 2018-05-09 04:11:45  0.00 2018-05-08 14:11:45 2018-05-08 19:11:45 UTC     America/Lima
34 2018-05-09 04:11:48  0.00 2018-05-08 14:11:48 2018-05-08 19:11:48 UTC     America/Lima
35 2018-05-09 04:11:51  0.00 2018-05-08 14:11:51 2018-05-08 19:11:51 UTC     America/Lima
36 2018-05-09 04:11:54  0.00 2018-05-08 14:11:54 2018-05-08 19:11:54 UTC     America/Lima
43 2019-03-06 13:52:40  0.50 2019-03-06 17:52:40 2019-03-06 04:52:40 UTC Pacific/Auckland
44 2019-03-06 13:52:50  3.50 2019-03-06 17:52:50 2019-03-06 04:52:50 UTC Pacific/Auckland
45 2019-03-06 13:53:00  6.50 2019-03-06 17:53:00 2019-03-06 04:53:00 UTC Pacific/Auckland
46 2019-03-06 13:53:10  9.00 2019-03-06 17:53:10 2019-03-06 04:53:10 UTC Pacific/Auckland
47 2019-03-06 13:53:20  9.50 2019-03-06 17:53:20 2019-03-06 04:53:20 UTC Pacific/Auckland
48 2019-03-06 13:53:30 12.00 2019-03-06 17:53:30 2019-03-06 04:53:30 UTC Pacific/Auckland

我希望能够对整个数据集或其中的部分进行分析和ggplot,使Date_time时区对每个区域都正确。

我将其解释为:;我想在本地时间绘制所有数据";,即,我希望奥克兰的上午11点相当于利马/东京的上午11点整。

实现这一点的一种方法是使用lubridate::force_tz函数,该函数改变POSIXct对象的时区而不调整";时间";组成部分

> t = as.POSIXct('2013-10-14 12:30:00', tz = 'Asia/Tokyo')
> t
[1] "2013-10-14 12:30:00 JST"
> lubridate::force_tz(t, 'UTC')
[1] "2013-10-14 12:30:00 UTC"

如果你在组合所有原始数据帧之前对它们进行处理,那么你可以假装所有数据都在同一时区,东京的上午11点和利马的上午11点通过。

当然,你可能会想保留一个实时时区的记录,以防你想把它们转换回来!

最新更新