问题:我正在处理患者数据,其中参数以不同的采样频率记录,因此具有不同的时间戳。
我想创建一个矩阵,其中数据按“Last known value”进行插值,直到新的原始值随时间变化。所以最后我有统一的矩阵,每个参数在每个时间戳都有值。
数据采用以下格式:
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用户论坛的以下主题
答案 0 :(得分:1)
您实际上正在尝试按照您提供的链接查看zero-order hold。
让我们调用第一组t_hr
(字符串的单元格数组)和第二组t_bp
(也是字符串的单元格数组)。然后调用心率hr
和血压bp
。
通过合并t
和t_hr
来构建新的单元格数组t_bp
:
t = [t_hr; t_bp];
使用hr
填写bp
和NaN
,使其与t
的长度相同。在t
中,向量的第一部分对应于我们知道hr
的时间,而后半部分对应于bp
。相应地使用这些知识:
hr = [hr; nan(length(t) - length(hr),1)];
bp = [nan(length(t) - length(bp),1); bp];
现在你有三个向量:t
(好吧,那实际上是一个单元格数组); hr
和bp
,hr
和bp
的元素对应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
的{{1}}索引。在这种情况下,t_sorted
。我们可以使用它来对idx == [1 7 2 3 8 4 5 9 6].'
和bp
进行排序:
hr
然后,应用零阶保持:
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
请注意,您的目标答案中有11个不同的时间,但您只提供了9个。 (它缺少18:03和18:07。)您可以通过向hr_sorted =
74
74
75
85
85
71
79
79
72
bp_sorted =
NaN
100
100
100
120
120
120
121
121
和NaN
添加额外的hr
,并使bp
成为单元格数组来轻松扩展此答案例如,由t
,t_hr
和单元格数组t_bp
组成。