我正在从Excel导入数据,然后尝试操纵R中的日期和时间,它给了我这样的头条 . 在Excel文件中,一列包含日期和时间,另一列包含同一天的不同时间 . R中的数据看起来基本上就像这个例子:
mydata <- data.frame(DateTime1 = as.POSIXct(c("2014-12-13 04:56:00",
"2014-12-13 09:30:00",
"2014-12-13 11:30:00",
"2014-12-13 13:30:00"),
origin = "1970-01-01", tz = "GMT"),
Time2 = c(0.209, 0.209, 0.715, 0.715))
我希望在POSIXct格式中有一个新的日期和第二次列,我无法让它工作 . 我试过了:
mydata$DateTime2 <- as.POSIXct(as.numeric(as.Date(mydata$DateTime1)
+ mydata$Time2), origin = "1970-01-01",
tz = "GMT")
但这给了我日期和时间接近1970年1月1日 .
这更复杂,但在我尝试过的其他类似情况中有一件事情是:
library(lubridate)
mydata$DateTime2 <- ymd_hms(format(as.POSIXct(as.Date(mydata$DateTime1) +
mydata$Time2,
origin = "1899-12-30", tz = "GMT")))
但这给了我8小时的日期和时间 . 这个时间差让我觉得问题是我在太平洋标准时间以来的时区,但我在输入数据和尝试转换时都将它设置为GMT!是什么赋予了?由于夏令时并发症,我对于为一切增加8小时犹豫不决 .
实际上,我在这里列出的两个尝试似乎都存在相互转换的问题,即,如果你从一个POSIXct对象开始并将其转换为数字然后再将它转换回POSIXct,你应该回到你开始的地方,你没有 . 类似地,如果你开始时区是GMT,然后你添加一些也设置为时区为GMT的东西,那么你不应该在神秘地转换到系统时区的某些地方遇到问题 .
建议吗?
1 回答
我找到了基于克里斯霍尔布鲁克答案的答案:How do you convert dates/times from one time zone to another in R?
这工作:
@MichaelChirico和我是正确的,时区是问题 . 当我检查
str(mydata$DateTime2)
时,我'm still not sure why, but the time zone for DateTime2 was apparently PST. It didn' t列出了"PST",但根据时差,它实际上必须是PST,直到我设置属性 . 疯 . 即使DateTime1是GMT,它也是如此 .