2016-05-06 48 views
0

我從Excel導入數據,然後嘗試操作R中的日期和時間,它給了我這樣的頭痛。在Excel文件中,一列包含日期和時間,另一列包含同一天的不同時間。 R中的數據基本上是這樣的例子:在R中相互轉換POSIXct和數字

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") 

但這給了我日期和時間接近1/1/1970。

這是比較繞口,但有一點,在這我也嘗試過其他similiar情況已工作是:

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時區的內容,那麼您不應該在神祕地轉換到系統時區的地方出現問題。

建議?

+0

在轉換之前和之後檢查'unclass(DateTime1)'。它應該是相同的基本整數(技術上'數字')之前和之後。如果是這樣,這只是設置正確的時區/原點的問題。 – MichaelChirico

+0

謝謝你的建議,但是我沒有看到包含'unclass(...'和不包括它)之間的區別 – LauraS

+0

我可能會誤解,但爲什麼不能直接將'Time2'添加到'DateTime1 '我不確定'Time2'的單位,但假設它是幾天,只是爲了說明。然後,'mydata $ DateTime2 = mydata $ DateTime1 + mydata $ Time2 * 24 * 60 * 60'(因爲POSIXct是因此我們將'Time2'轉換爲秒) – eipi10

回答

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和我是正確的時區是問題。我仍然不確定爲什麼,但DateTime2的時區顯然是PST。它沒有列表「PST」,當我檢查str(mydata$DateTime2),但基於時間差異,它一定是,事實上,PST直到我設置屬性。瘋。即使DateTime1是格林威治標準時它也這樣做了。