首页 文章

在R中互换POSIXct和数字

提问于
浏览
0

我正在从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 回答

  • 0

    我找到了基于克里斯霍尔布鲁克答案的答案:How do you convert dates/times from one time zone to another in R?

    这工作:

    mydata$DateTime2 <- as.POSIXct(as.Date(mydata$DateTime1) +
                                     mydata$Time2)
     attributes(mydata$DateTime2)$tzone <- "GMT"
    

    @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,它也是如此 .

相关问题