我使用库(lubridate)中的parse_date_time函数将时间序列引入R,并将其作为EST引入。
streamflowDateTime<-parse_date_time(streamflowDateTime,"%m%d%Y %H%M",tz="EST")
然而,数据在2005年4月3日01:45经历夏令时,下一个时间步长是03:00。我想通过减去一个小时将这个事件和随后的所有时间戳转换为EST,使其连续。如果有一种自动化的方法来实现这一点,那将是优选的,因为夏令时并不是每年在同一天同一时间生效,因此该程序可以确定夏令时的开始时间并向后移动一个小时。
这是的数据样本
structure(c(1112475600, 1112476500, 1112477400, 1112478300, 1112479200,
1112480100, 1112481000, 1112481900, 1112482800, 1112483700, 1112484600,
1112485500, 1112486400, 1112487300, 1112488200, 1112489100, 1112490000,
1112490900, 1112491800, 1112492700, 1112493600, 1112494500, 1112495400,
1112496300, 1112497200, 1112498100, 1112499000, 1112499900, 1112500800,
1112501700, 1112502600, 1112503500, 1112504400, 1112505300, 1112506200,
1112507100, 1112508000, 1112508900, 1112509800, 1112510700, 1112515200,
1112516100, 1112517000, 1112517900, 1112518800, 1112519700, 1112520600,
1112521500, 1112522400, 1112523300, 1112524200, 1112525100, 1112526000,
1112526900, 1112527800, 1112528700, 1112529600, 1112530500, 1112531400,
1112532300, 1112533200, 1112534100, 1112535000, 1112535900, 1112536800,
1112537700, 1112538600, 1112539500, 1112540400, 1112541300, 1112542200,
1112543100, 1112544000, 1112544900, 1112545800, 1112546700, 1112547600,
1112548500, 1112549400, 1112550300, 1112551200, 1112552100, 1112553000,
1112553900, 1112554800, 1112555700, 1112556600, 1112557500, 1112558400,
1112559300, 1112560200, 1112561100, 1112562000, 1112562900, 1112563800,
1112564700, 1112565600, 1112566500, 1112567400, 1112568300, 1112569200
), class = c("POSIXct", "POSIXt"), tzone = "EST")
编辑:
streamflowDateTime[8840:length(streamflowDateTime)] <- streamflowDateTime[8840:length(streamflowDateTime)]-hours(1)
在整个数据集中,发生在位置8840,我手动知道,我希望代码自动找到两个连续时间戳之间的时间差不是15分钟的位置,并用该自动值替换代码中的"8840"。对于循环太慢,
您可能只需要提供完整的IANA时区ID America/New_York
,而不是时区缩写。
parse_date_time(streamflowDateTime,"%m%d%Y %H%M",tz="America/New_York")
使用America/New_York
将正确考虑EST和EDT,包括它们之间的正确转换。
正如这篇博客文章中所看到的,这似乎得到了支持——至少在提供IANA/Olson时区的系统上是这样,比如Linux或Mac。
根据文件:
R没有预定义的区域名称列表,而是依赖于用户的操作系统来解释时区名称。因此,某些名称将在某些计算机上被识别,而在其他计算机上则无法识别。然而,大多数计算机都会识别最初由Arthur Olson编译的时区数据库中的名称。这些名称通常采用"国家/城市"的形式。…
由于Windows使用自己的一组时区,您可能无法使用IANA/Olson标识符。但是:
等效的Windows时区id为
"Eastern Standard Time"
。(尽管名称不同,但它同时涵盖EST和EDT)。我不确定R是否支持这些。当前规则的完全限定POSIX时区为
"EST5EDT,M3.2.0,M11.1.0"
。这应该适用于所有操作系统,但自2007年更改以来,它只代表美国东部时区。- 从1987年到2006年,规则应该是
"EST5EDT,M4.1.0,M10.5.0"
。对您正在处理的值使用适当的规则。如果您的日期跨越了这些时间段,则需要将它们拆分并单独处理,或者如果可能,编写一个函数来对数据使用正确的规则
- 从1987年到2006年,规则应该是
另请参阅时区标记wiki。