使用Mathematica中的Select在子列表中进行条件选择

时间:2011-06-28 16:46:57

标签: select wolfram-mathematica conditional

考虑以下列表:

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

因此,当在Cond1和&之间选择10次时当Cond1首先出现时,Cond2,Cond1优选为10次中的7次。

**

  

我需要有条件地提取和/或   总结列表的一部分。

**

到目前为止我一直在做的事情:

提取首先显示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&的总数。 Cond2 VS Cond1:

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

将是输出

或Cond2首次针对Cond3呈现时的总计数:

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

这些是我所缺少的。 实际上共有5个条件

1 个答案:

答案 0 :(得分:3)

我喜欢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}}}