2012-01-23 92 views
0

我輸入的數據包含主題ID和2個類別的列表,以及實時和兩個值。每個ID的實時和值可能會有不同的長度。文件中有多個ID,每個ID有多個類別。將時間戳格式化爲時間間隔

我遇到了一些麻煩,找到一個很好的工具來做這個改變到數據文件的變化。我正在使用PostgreSQL來提取數據和R進行分析,因爲無法找到幫助的好函數。有什麼想法嗎?我基本上希望將實時時間設置爲30分鐘時間間隔而不是時間戳,並將這些作爲我的屬性,並將V1的值用作實際值。但首先,我必須將時間間隔類別放入我的數據中。

輸入:

ID CAT1 CAT2 realtime  V1 
21 23  51  11/2/3138 18:29 135 
21 23  51  11/2/3138 18:58 132 
21 23  51  11/2/3138 21:05 129 
21 23  51  11/2/3138 21:05 130 
21 23  51  11/2/3138 22:53 142 
71 23  52  11/4/3138 6:47 66 
71 23  52  11/4/3138 8:45 69 
71 23  52  11/4/3138 8:45 68 

輸出:

ID || CAT1 || CAT2 || Interval 0 || Interval 1 || Interval 2 || Interval 3 || ... 
21 || 21 || 23 || 135  || 132  || 130  || 142  || ... 
71 || 23 || 52 || 66   || 69   || 68   || NULL  || ... 

我也寫了一些有關串聯的數據,這些數據並沒有顯示出是非常有用的,但是如果你不同意,請讓我知道: Perl + PostgreSQL-- Selective Column to Row Transpose

編輯::我會打開使用韋卡或Matlab如果存在 - 或腳本語言來解決這個問題,但我希望有一個函數/ pa ckage在某處...

+0

3138?你確定嗎? –

+0

這是公共健康數據,所以它給了垃圾年。由於我只對時間間隔感興趣,所以我們不需要專注於此。 –

回答

1

您只需將「實時」字符串轉換爲實際時間,然後從那裏開始工作,由間隔長度劃分:

d$interval = floor(as.numeric(strptime(d$realtime,"%m/%d/%Y %H:%M"))/1800) 
如果你想

字面上「間隔X」變量只需添加

d$interval = paste("Interval", d$interval - min(d$interval)) 

,並創建一個長格式,使用reshape

reshape(d[,names(d) != 'realtime'],idvar=c("ID","CAT1","CAT2"),timevar="interval",direction="wide") 

但是,請注意,默認情況下采取第一個匹配值的情況下重複,而在你的例子中,我認爲你使用的是最後一個,所以你可能想扭轉或如果是這樣的話,你的數據就是這樣。

+0

對不起,只是意識到我從不接受! –

0

要以非標準格式在PostgreSQL表中插入時間戳,可以使用函數to_timestamp()
實施例:

SELECT to_timestamp('11/2/3138 18:29', 'MM/DD/YYYY hh24:mi') 

結果(ISO 8601格式顯示):

3138-11-02 18:29:00+01 

要截斷時間戳來半小時精度,可以使用的功能和date_trunc()date_part() or extract()
例如:

SELECT date_trunc('hour', now()) 
    + CASE WHEN extract(minute from now()) > 29 THEN 30 
             ELSE 0 END * interval '1 min' 
+0

這個date_trunc是我以前不知道的,謝謝。我想知道是否對如何創建Interval 0(第一時間戳),Interval 1,Interval 2等的屬性有什麼想法,其間隔是根據間隔0測量的? –

+0

@LillianMilagrosCarrasquillo:我不知道我理解你的問題。我建議你打開另一個問題,幷包括你有什麼和你想要得到的東西的例子。 –

+0

謝謝您的輸入! 我有實時,如上所述,並希望改爲有間隔。對於每個唯一的ID/Cat1/Cat2,我想首次將「Interval 0」定義爲Interval 1,並將其定義爲下一個Realtime1 - 實時2。 –