2011-02-01 59 views
7

我有一個數據集,它將日期時間編碼爲兩個單獨的變量。通常情況下,我只需將它們粘貼在as.POSIXct之內並繼續。但是,日期以字符串形式提供,一天的時間爲24小時的一小部分 - 例如,下午12點是0.5,上午9點30分是0.1458333,等等。將日期的部分轉換爲R中的POSIX時間

轉換轉換似乎並不麻煩分數天到時鐘小時,但我更喜歡使用預先存在的功能,如果可能的話。像R這樣的東西存在嗎?一套?

如果有任何用處,這是一個通過RODBC導入到R中的Excel(xlsx)時間字段。

編輯 奇怪的是,在重新審視這個問題時,時間現在被讀作POSIXct。不知道該怎麼做。

+0

哈哈。這聽起來像我閱讀xls文件的經歷。有一天,我寫R代碼從一個數字的Excel日期轉換,然後一週後,我用一些新的數據編輯xls,當我在R中讀取它時,日期是文本。您可能會在Excel中使用單元格格式來修復它。 – 2011-02-05 01:56:40

+0

如果您在Excel中將數據時間應用於cut-time格式,則text-csv文件中的值將遵循該格式。我建議'yyyy-mm-dd hh:mm:ss AM/PM'或'yyyy-mm-dd hh:mm:ss'。我沒有配置RODBC,因此無法測試以確定這是否會影響數據庫傳輸。 – 2015-01-09 20:36:13

回答

5

POSIXct值僅僅是因爲午夜GMT 1970-01-01的秒數。 (所以你需要注意你與UTC的偏移量。)你可以使用日期部分並將天數乘以24 * 3600(as.Date(dtval)到你的時間值* 24 * 3600。Gabor指向文章在R新聞(他寫道,謝謝你,Gabor。)

你沒有給出一個字符串的例子,如果你將日期作爲一個字符串,然後as.Date(strDate)將轉換當它是「YYYY-MM-DD」或「YYYY/MM/DD」格式時,變量「strDate」到Date類。否則格式代碼位於?strptime頁面上

一旦你有一個POSIXct-這個例子今天增加了30分鐘至今天2011年2月1日的午夜(在我的時區是UTC-5):

> as.POSIXct(as.Date("2011-02-01")) +30*60 
[1] "2011-01-31 19:30:00 EST" 

這是加入到午夜,我的時間你的時間價值:

> as.POSIXct(as.Date("2011-02-01 00:00", tzone="UTC"))+3600*5 + 3600*24*timeval 
[1] "2011-02-01 03:29:59 EST" 
6

R News 4/1服務檯文章有部分在R.

閱讀Excel的日期
+0

p。 30,具體 – 2015-04-01 16:04:06