Условный выбор в подсписке с помощью Select in Mathematica - PullRequest
0 голосов
/ 28 июня 2011

Рассматривая следующий список:

answers = {
          {{1, 2}, {7, 3}}, {{1, 3}, {6, 4}}, 
          {{2, 1}, {2, 8}}, {{2,3}, {8, 2}}, 
          {{3, 1}, {1, 9}}, {{3, 2}, {3, 7}}
          }

enter image description here

В контексте задачи, в которой субъектам последовательно представлены 2 стимула, при этом необходимо выбрать тот, который они предпочитают, первыйподсписок:

{{1, 2}, {7, 3}}

может читаться как

{{Cond1, Cond2}, {Cond1 Preferred Count, Cond2 Preferred Count}}

Таким образом, при выборе 10 раз междуCond1 и Cond2, когда Cond1 представлен первым, Cond1 предпочтительнее 7 раз из 10.

**

Мне нужно условно извлечь и / или суммировать часть списка.

**

Что я делал до сих пор:

Чтобы извлечь списки, в которых Cond1 представлен первым:

Select[answers, #[[1, 1]] == 1 &]

= {{{1, 2}, {7, 3}}, {{1, 3}, {6, 4}}}

И чтобы получить общее количество для одного условия против всех остальных:

Plus @@ Select[answers, #[[1, 1]] == 1 &][[All, 2]]

= {13, 7}

Теперь мне нужно:

Запросить общее количество для Cond1 VS Cond2 & Cond2VS Cond1:

{{{1, 2}, {7, 3}},{{2, 1}, {2, 8}}}

будет выходным значением

или общим количеством, когда Cond2 был впервые представлен против Cond3:

{{2,3}, {8, 2}}

Эточего мне не хватаетВсего в реальности 5 условий

1 Ответ

3 голосов
/ 29 июня 2011

Мне нравится Cases для этого, так как я думаю, что синтаксис получается чище.Вот один из подходов, использующий несколько легких служебных функций:

In[25]:= conditions[pat_] := Cases[answers, {pat, _}]

In[26]:= conditionSums[pat_] := Total[Last /@ conditions[pat]]

In[27]:= conditions[{1, _}]

Out[27]= {{{1, 2}, {7, 3}}, {{1, 3}, {6, 4}}}

In[28]:= conditionSums[{1, _}]

Out[28]= {13, 7}

In[29]:= conditions[{1, 2} | {2, 1}]

Out[29]= {{{1, 2}, {7, 3}}, {{2, 1}, {2, 8}}}

In[30]:= conditions[{2, 3}]

Out[30]= {{{2, 3}, {8, 2}}}
...