2016-05-13 86 views
0

我正在將一些JSON數據讀入R,並將日期時間信息存儲爲單獨的時間組件(年,月,小時等)。鑑於我已經有了單獨的部分,因爲後者只是一個時間組件列表,所以似乎應該很容易創建一個POSIXlt對象。從時間組件列表中創建POSIXlt

as.POSIXlt將不接受組件的命名列表或向量。可以通過將相應的類和attr添加到列表來創建POSIXlt,但是如果沒有wday和yday元素(它們不具有),它會失敗。

我知道我可以將列表轉換爲一個字符串並解析它,但這是如此不雅的解決方案,我認爲我會確保沒有更好的方法。

編輯:ISOdatetime正是我正在尋找。謝謝!

+0

你能張貼一些樣本數據嗎?所以我們實際上可以提供工作代碼來幫助? – Gopala

+0

我不認爲這會有所作爲。我已經在一起破解了一個可行的解決方案(在我的問題中提到)。我只是想知道R專家能否提出更好的方法。 – user862507

+0

如果您想使用堆棧溢出獲得幫助,最好遵循一個可重現示例的指導原則。我建議你這樣做。就這些。 – Gopala

回答

1

ISOdate是要使用的命令:

ISOdate(year, month, day, hour = 12, min = 0, sec = 0, tz = "GMT") 

該函數返回一個POSIXct類型。請參閱?ISOdate以獲取更多信息。

+0

太棒了!這在任何搜索過程中都沒有出現。小時/分鐘/秒沒有默認值,ISOdatetime做同樣的事情。完善。謝謝! – user862507

0

的ISOdate或ISOdatetime功能顯然使用的那些,但既然你問如何與POSIXlt做它作爲一個起點,這裏是一個有點黑客:

test <- as.POSIXlt("1970-01-01") 
dput(test) 
structure(list(sec = 0, min = 0L, hour = 0L, mday = 1L, mon = 0L, 
    year = 70L, wday = 4L, yday = 0L, isdst = 0L, zone = "PST", 
    gmtoff = NA_integer_), .Names = c("sec", "min", "hour", "mday", 
"mon", "year", "wday", "yday", "isdst", "zone", "gmtoff"), class = c("POSIXlt", 
"POSIXt")) 
test$year <- 1941 
test$mon <- 12 
test$mday <-7 
test 
#[1] "3842-01-07 PST" Wrong offset 
test$year <- 41 
test 
#[1] "1942-01-07 PST" "An infamous date" 

我懷疑這是「錯誤的」。因爲我懷疑一週中的哪一天或其他列表項目會得到適當的改變。