分类减法(Matlab)

时间:2014-03-19 15:53:40

标签: matlab

进行实验,其中某些个体(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),它会起作用。

我希望我的问题很明确,而且有人可以提供帮助,

提前致谢!

1 个答案:

答案 0 :(得分:1)

同样,正如评论中所述,我还没有使用Matlab一段时间,我绝对毫无疑问有更好的方法来做到这一点,但是使用for循环,我可以想象一个解决方案如下:

for val = 1:numel(Datamatrix)
   if Datalabel{val,3} == '0'
      ToSubtract = Datamatrix(val);
   end
   ChangedDataMatrix(val) = Datamatrix(val) - ToSubtract;
end

应该:

  1. 根据Datalabel矩阵的第3列确定要减去的内容。
  2. 仅在时间0进行测试时拉出值。
  3. 从该值中减去所有测试,直到在时间0发生下一次测试。
  4. 同样,我毫不怀疑这可以通过其他方式完成,但我现在比编程模式更多,但我希望这可以做到这一点!!