我正在处理患者数据,其中参数以不同的采样频率记录,因此具有不同的时间戳。
我想创建一个矩阵,其中数据按"最后已知值"进行插值。直到新的原始值在时间上变化。所以最后我有统一的矩阵,每个参数在每个时间戳都有值。
这是我上一个问题的扩展版本,
Interpolate the time stamped patient data
数据采用以下格式:
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 pH.(Variable)
18:10:00 PM 7.5
18:15:00 PM 7.31
18:20:00 PM 7.42
Time SaO2.(Variable)
18:01:00 PM 100
18:11:00 PM 98
18:21:00 PM 95
缺失位置的插值数据应该是已知事件的先前值,并且应该保持相同,直到下一次更改发生。
我目前正在参考MATLAB用户论坛的以下主题
现在我正在使用以下方法,但在最后两个时间序列的插值中遇到一些问题,即ph
和sao2
,它不按时间序列的零顺序保持工作。
T = [t_hr; t_bp; t_ph; t_sao2];
使用T
值填充NaN
的长度,其中原始值不存在。
hr = [hr; nan(length(t) - length(hr),1)];
bp = [nan(length(t) - length(bp),1); bp];
ph = [nan(length(t) - length(ph),1); ph];
sao2 = [nan(length(t) - length(sao2),1); sao2];
对主时间序列T
[Tsort, idx] = sort(T);
hr_sorted = hr(idx);
bp_sorted = bp(idx);
ph_sorted = ph(idx);
sao2_sorted = sao2(idx);
应用零序保持
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
if isnan(ph_sorted(ii))
ph_sorted(ii) = ph_sorted(ii-1);
end
if isnan(bp_sorted(ii))
sao2_sorted(ii) = sao2_sorted(ii-1);
end
end
合并主矩阵中的所有数据
main = [Tsort, hr_sort, bp_sort, ph_sort, sao2_sort];
问题是最后两个数据没有根据时间序列进行插值,使用这种方法将它们置于不同于原始值的值。
但是他们应该放在时间序列的第三和第四部分,我不知道如何使用这种方法放置它们。