进行实验,其中某些个体(ID:1,2,3)接受多次治疗(治疗:A,B,C)。在每次治疗后记录响应变量三次(时间:0,1,2)。因此,对于ID和治疗的每种组合,存在3个输出。
我的数据是纵向格式,由两个对象组成:datalabel和datamatrix
Datalabel是一个27 * 3的单元格,其中包含有关Datamatrix double(27x1)中结果的ID,处理和时间组合的信息。
Datalabel看起来像这样:
{'1', 'A', '0';
'1', 'A', '1';
'1', 'A', '2';
'1', 'B', '0';
'1', 'B', '1';
%datapoints in between
'3', 'C', '1';
'3', 'C', '2'}
Datamatrix看起来像这样:
[1;3;4;6; 8;
%datapoints in between
2;8]
我想要做的是,对于ID和治疗的每个组合,从所有三个输出中减去时间0的输出。结果将是一个新的27x1双倍,如下所示:
[0;2;3;0; 2;
%datapoints in between
-1;5]
在这种情况下,它并不太难。但我希望找到一个通用的解决方案,无论有多少不同级别的“处理”,“处理”和“ID'当有些动物没有接受某种治疗时,它就会起作用,并且当缺少观察结果时(无论uur = 0),它会起作用。
我希望我的问题很明确,而且有人可以提供帮助,
提前致谢!
答案 0 :(得分:1)
同样,正如评论中所述,我还没有使用Matlab一段时间,我绝对毫无疑问有更好的方法来做到这一点,但是使用for循环,我可以想象一个解决方案如下:
for val = 1:numel(Datamatrix)
if Datalabel{val,3} == '0'
ToSubtract = Datamatrix(val);
end
ChangedDataMatrix(val) = Datamatrix(val) - ToSubtract;
end
应该:
同样,我毫不怀疑这可以通过其他方式完成,但我现在比编程模式更多,但我希望这可以做到这一点!!