我想将每小时法语时间的字符序列转换为POSIXct 此序列包括在02:00(CEST => CET)的dst时钟更改,这会导致重复的输出时间。
char_dates <- c("2017-10-29 01:00:00",
"2017-10-29 02:00:00",
"2017-10-29 02:00:00",
"2017-10-29 03:00:00")
ymd_hms(char_dates, tz = "Europe/Paris")
输出:
"2017-10-29 01:00:00 CEST" "2017-10-29 02:00:00 CET" "2017-10-29 02:00:00 CET" "2017-10-29 03:00:00 CET"
所需输出(注意第二时区):
"2017-10-29 01:00:00 CEST" "2017-10-29 02:00:00 CEST" "2017-10-29 02:00:00 CET" "2017-10-29 03:00:00 CET"
实现这一目标的好方法是什么?
我们可以假设日期已经排序,或者用户可以提供布尔向量(dst:yes / no)来告诉lubridate选择哪个时区。
答案 0 :(得分:0)
检查是否有重复(从结尾)并减去重复值3600(一小时,以秒为单位)。如果您有一个布尔矢量,请使用它而不是duplicated(temp, fromLast = TRUE)
。
char_dates <- c("2017-10-29 01:00:00",
"2017-10-29 02:00:00",
"2017-10-29 02:00:00",
"2017-10-29 03:00:00")
temp = ymd_hms(char_dates, tz = "Europe/Paris")
temp[duplicated(temp, fromLast = TRUE)] = temp[duplicated(temp, fromLast = TRUE)] - 3600
temp
#[1] "2017-10-29 01:00:00 CEST" "2017-10-29 02:00:00 CEST" "2017-10-29 02:00:00 CET"
#[4] "2017-10-29 03:00:00 CET"