2017-01-23 1 views
0

Итак, у меня есть некоторые данные из приложения iPad, которое создает массив ячеек с именем subj, так что в subj я могу получить доступ к результатам из моей игры в iPad. У меня 40 человек. Если я нахожу subj{1}.correct, он дает мне результаты 30 вопросов - 1 или 0, если они правильно/неправильно, 1 x 30, для предмета 1. Если я нахожу subj{1}.stimulus, он сообщает, какие вопросы они были представлены. Всего 30 вопросов, но каждый человек получил их в случайном порядке. Как получить 1 матрицу с номером темы, ее результаты и все отсортированные так, чтобы они были в порядке на вопрос #?Комбинируйте данные, полученные в разном порядке каждый раз

Этот код работает, если я каждый раз изменяю каждый раз номер, поэтому как это сделать для всех 40 участников?

C1 = subj{1}.correct 
    C1 = C1' 
    S1 = subj{1}.stimulus 
    S1 = S1' 
    S1 = sort(S1) 
    A1 = table(C1,S1); 
%count, n, subj - will be in workspace 

Вот что я пытался для цикла, но он не работает :(

for n = 1:40; 
    A{n} = subj{n}.correct 
    B{n} = A{n}' 
    C{n} = subj{n}.stimulus 
    D{n} = C{n}' 
    E{n} = table(B{n},D{n}) 
end 

Это ошибка один он сказал:

Cell contents assignment to a non-cell array object.

ответ

2

Непосредственная проблема с кодом выше заключается в том, что у вас должна быть переменная с именем A, B, C, D или E в вашем рабочем пространстве уже и так t его назначение не выполняется. Чтобы быть уверенным, это не произойдет, вы можете предварительно выделить эти переменные перед циклом

A = cell(size(subj)); 

То, что я бы вместо этого, хотя это первый получить список всех стимулов с использованием unique на первой теме

stimuli = unique(subj{1}.stimulus); 

Мы можем использовать это как «ссылочный порядок» стимулов и убедиться, что все остальные предметы отсортированы в этом порядке.

Я бы тогда предварительно выделить вашу матрицу результатов и заполнить его с помощью простого цикла, в котором мы используем ismember, чтобы выяснить, какие стимулы перечислен где (second output дает нам этот показатель), а затем использовать, чтобы изменить порядок correct поле. Результирующая матрица будет nSubjects x nStimuli, а порядок стимулов будет таким же, как и stimuli выше.

results = false(numel(subj), numel(stimuli)); 

for k = 1:numel(subj) 
    [~, inds] = ismember(subj{k}.stimulus, stimuli); 
    results(k,:) = subj{k}.correct(inds); 
end 

Если вы хотите, чтобы вывод быть в table, вы могли бы использовать array2table, чтобы сделать преобразование

T = array2table(results, 'VariableNames', stimuli); 
+0

Спасибо за ваш ответ! Так я просто запускаю все те вещи, которые вы отправили? Почему часть стимулов имеет subj {1}? Также я запустил это и получил эту ошибку: индексы индексов должны быть либо натуральными положительными целыми числами, либо логическими. – mathpun

+0

@ user3290443 Вы уверены, что все пользователи всегда отвечают на все вопросы? – Suever

+0

Ну, вы полностью изменили мой код, и я понятия не имею, что происходит дальше - не могли бы вы использовать немного больше помощи? Я думал, что был близок с тех пор, как он работал над отдельными испытаниями, но ваш код использует так много вещей, которых я никогда не видел раньше , Я всего лишь новичок – mathpun