2014-03-19 3 views
0

Был проведен эксперимент, в ходе которого некоторые лица (ID: 1, 2, 3) получали несколько обработок (лечение: A, B, C). Переменная Response регистрировалась три раза после каждой обработки (время: 0, 1, 2). Для каждой комбинации идентификаторов и лечения, таким образом, существуют 3 выхода.вычитание по классу (Matlab)

Мои данные в продольном формате и состоит из двух объектов: datalabel и DataMatrix

Datalabel является 27 * 3 клетка, которая содержит информацию о комбинации ID, лечения и времени результатов в Datamatrix двойной (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'} 

Datamatrix выглядит следующим образом:

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

То, что я хотел бы сделать это, для каждой комбинации ID и лечения, вычитать выход в момент времени 0 от всех трех выходов. Результатом будет новый 27x1 двойной, который выглядит следующим образом:

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

В этом случае это не так уж сложно. Но я хотел бы найти общее решение, которое работает независимо от того, сколько разных уровней «уур», «лечение» и «идентификатор» есть, что работает, когда некоторые животные не получили определенного лечения, и это работает, когда отсутствуют наблюдения (не для uur = 0).

Я надеюсь, что моя проблема ясна, и что кто-то может помочь,

Заранее спасибо!

+0

Можете ли вы объяснить, что вы подразумеваете под «вычитанием выхода в момент времени 0 из всех трех выходов». и как вы получите матрицу '[0; 2; 3; 0; 2; ... ' –

+0

также, ваша оригинальная матрица 27x1, будет ли все столбцы 3 всегда (0,1,2) повторены? Просто для понимания –

+0

Для каждой комбинации идентификаторов и обработки есть три ответа в момент времени 0, 1 и 2. Я бы хотел вычесть ответ в момент времени 0 из ответа в момент времени 1 и время 2. – Nightingale

ответ

1

Опять же, как указано в комментариях, я не использовал Matlab на некоторое время, и я не абсолютно никаких сомнений в том, что есть более хорошие способы сделать это, но, используя для петель, я мог бы представить себе решение, глядя следующим образом:

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

Это должно:

  1. Решите, что вычитать на основе 3-го столбца матрицы вашей Datalabel.
  2. Вытяните значение только тогда, когда оно находится на испытании в момент времени 0.
  3. Вычтите все тесты с этого значения до следующего теста в момент времени 0.

Опять же, я не сомневаюсь, что это может быть сделано другими способами, но я сейчас в режиме программирования, чем Matlab, но я надеюсь, что это трюк!

+0

Спасибо, я могу работать с этим! Будет ли это делать завтра, чтобы проверить, работает ли это – Nightingale

Смежные вопросы