2014-03-19 90 views
0

進行了一個實驗,其中某些個體(ID:1,2,3)接受多重處理(處理:A,B,C)。在每次治療後記錄響應變量三次(時間:0,1,2)。因此,每個ID和治療組合都有3個輸出。分類減法(Matlab)

我的數據是在縱向形式,由兩個對象:datalabel和數據矩陣

Datalabel是一個27 * 3細胞,其包含關於ID,治療的組合信息,和時間在數據矩陣的結果的雙倍(27x1)。

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'} 

二維條碼是這樣的:

[1;3;4;6; 8; 
%datapoints in between 
    2;8] 

我想要做的是,對ID和處理的每個組合,減去輸出時間爲0來自所有三個產出。結果將是一個新的27x1雙倍看起來像這樣:

[0;2;3;0; 2; 
%datapoints in between 
    -1;5] 

在這種情況下,它不是太困難。但是我希望找到一種通用的解決方案,不管有多少種不同的「uur」,「治療」和「ID」,在某些動物沒有得到某種治療時起作用,並且在那裏有效時缺少觀測值(不適用於uur = 0)。

我希望我的問題是明確的,有人能夠幫助,

提前感謝!

+0

您能解釋一下「從所有三個輸出中減去時間0的輸出」的含義嗎?以及如何得到矩陣[0; 2; 3; 0; 2; ...' –

+0

也,你原來的27x1矩陣,將所有列3總是(0,1,2)重複?瞭解 –

+0

對於ID和治療的每種組合,都存在三個響應,分別爲時間0,1和2.我想從時間1和時間2的響應中減去時間0的響應。 – Nightingale

回答

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矩陣的第三列減去什麼。
  2. 只有當它在時間0測試時拉出該值。
  3. 從該值中減去所有測試,直到在時間0發生下一次測試。

同樣,我毫不懷疑這可以通過其他方式完成,但我現在處於編程模式而不是Matlab,但我希望這可以做到這一點!

+0

謝謝,我可以用這個工作!明天還會執行它檢查它是否有效 – Nightingale