2017-01-23 3 views
0

subjのiPadのゲームから結果にアクセスできるように、というセルアレイを作成する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ループ試みたものですが、それはこれがそれは言っつのエラーです:(

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

すでにABCD、またはEという名前の変数をワークスペースに作成しておく必要があります彼の割り当ては失敗しています。これはあなたがループ

A = cell(size(subj)); 

前にこれらの変数を事前に割り当てることができ起こらないことを確認するために私は何だろう代わりに、最初の第一の主題にuniqueを使用して、すべての刺激のリストを取得することですが、

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

これを刺激の「参照順」として使用し、他のすべての被験者がこの順序でソートされていることを確認することができます。

私は、あなたの結果行列を事前に割り当て、我々はどこ記載されている刺激を見つけ出す(second outputは私たちに、この指標を与える)し、その後correctを並べ替えるためにそれを使用するためにismemberを使用した単純なループでそれを埋めるだろうフィールド。結果の行列は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になりたい場合は、コンバージョンにご返信用

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

感謝を作るためにarray2tableを使用することができます!だから私はあなたが送ったものすべてを実行するだけですか?刺激部分にsubj {1}があるのはなぜですか?また、私はこれを実行し、このエラーを受け取りました:添え字インデックスは、正の整数または 論理値のいずれかでなければなりません。 – mathpun

+0

@ user3290443すべてのユーザーが常に*すべて*の質問に答えてもよろしいですか? – Suever

+0

まあまあ、私のコードを完全に変更して、もう何が起こっているのかわからない - もう少し助けてもらえますか?私はそれが個々の試行で働いていたので近いと思っていましたが、私はちょうど初心者です – mathpun

関連する問題