2014-06-06 22 views
0

問題:我正在處理患者數據,其中參數以不同的採樣頻率記錄,因此具有不同的時間戳。插入帶時間戳的患者數據

我想創建一個矩陣,其中數據被插入「最後已知值」,直到新的原始值在時間上發生變化。所以最後我有統一矩陣,其中每個參數在每個時間戳都有值。

數據是在以下格式:

Time    Hear Rate(Variable)   
18:00:00 PM  74 
18:02:00 PM  75 
18:04:00 PM  85  
18:06:00 PM  71   
18:08:00 PM  79   
18:10:00 PM  72 

Time    Blood Press. (Variable)   
18:01:00 PM  100 
18:05:00 PM  120 
18:09:00 PM  121 

目標:

Time    Hear Rate(Variable) Blood Press.  
18:00:00 PM  74      NaN 
18:01:00 PM  74      100 
18:02:00 PM  75      100 
18:03:00 PM  75      100 
18:04:00 PM  85      100 
18:05:00 PM  85      120 
18:06:00 PM  71      120 
18:07:00 PM  71      120 
18:08:00 PM  79      120 
18:09:00 PM  79      121 
18:10:00 PM  72      121 

在缺少的地方內插數據應該是公知的事件的先前值,直到下一個變化出現應保持相同。

我目前從MATLAB用戶論壇

http://www.mathworks.com/matlabcentral/answers/1-how-can-i-do-1-d-interpolation-with-interp1-to-find-the-nearest-value-to-the-left-of-the-point-i-e

回答

1

參考以下螺紋的你基本上試圖做一個zero-order hold因爲你已經從你提供的鏈接看到。我們稱第一組時間爲t_hr(字符串的單元數組),第二組爲t_bp(也是字符串的單元數組)。然後調用心率hr和血壓bp

建立一個新的單元陣列t結合t_hrt_bp

t = [t_hr; t_bp]; 

填寫hrbp一些NaN s到使它們的長度相同t。在t中,矢量的第一部分對應於我們知道的關於hr的時間,並且第二部分對應於bp。因此使用這些知識:

hr = [hr; nan(length(t) - length(hr),1)]; 
bp = [nan(length(t) - length(bp),1); bp]; 

現在你已經有了三個矢量:t(好吧,這實際上是一個單元陣列); hrbp,以及hrbp元素對應元素t,包括NaN S:現在

t = 
'18:00:00 PM' 
'18:02:00 PM' 
'18:04:00 PM' 
'18:06:00 PM' 
'18:08:00 PM' 
'18:10:00 PM' 
'18:01:00 PM' 
'18:05:00 PM' 
'18:09:00 PM' 

hr = 
74 
75 
85 
71 
79 
72 
NaN 
NaN 
NaN 

bp = 
NaN 
NaN 
NaN 
NaN 
NaN 
NaN 
100 
120 
121 

,我們可以排序t

[t_sorted, idx] = sort(t); 

idx包含t指數是轉移到形成t_sorted。在這種情況下,idx == [1 7 2 3 8 4 5 9 6].'。我們可以用它來進行排序bphr:然後

hr_sorted = hr(idx) 
hr_sorted = 
74 
NaN 
75 
85 
NaN 
71 
79 
NaN 
72 

bp_sorted = bp(idx) 
bp_sorted = 
NaN 
100 
NaN 
NaN 
120 
NaN 
NaN 
121 
NaN 

,應用零階保持:

for ii = 2:length(t) 
    if isnan(hr_sorted(ii)) 
     hr_sorted(ii) = hr_sorted(ii-1); 
    end 
    if isnan(bp_sorted(ii)) 
     bp_sorted(ii) = bp_sorted(ii-1); 
    end 
end 

和您的最終載體變成:

hr_sorted = 
74 
74 
75 
85 
85 
71 
79 
79 
72 

bp_sorted = 
NaN 
100 
100 
100 
120 
120 
120 
121 
121 

請注意,您的目標答案有11個不同的時間,但你只提供了9個。 (它缺少18點03分和18點07分。)你可以通過添加額外的NaNhrbp,並且使得t包括例如t_hrt_bp和單元陣列t_missing ={'18:03:00 PM', '18:07:00 PM'}的單元陣列來容易地擴展該答案。

+0

謝謝你的恩惠:)肯定會嘗試在我的大型數據集上實現。 @Dang –