我使用以下函数对List执行条件操作:
consider[data_, conditionCOL_, conditionVAL_, listOfCol_] :=
Select[data, (#[[conditionCOL]] == conditionVAL) &][[All, listOfCol]]
考虑以下示例:
dalist = Join[Tuples[Range[4], 2]\[Transpose], {Range[16], Range[17, 32, 1]}
]\[Transpose];
我使用以下内容来获取函数定义的特定列的方法。 这将输出第3栏和第3栏的条目。 4,第1列中的相应条目等于2
Mean@consider[dalist, 1, 2, {3, 4}]
现在,我想在要平均的值上添加约束/阈值:
平均值:
下面,给出一个例子,其值的平均值应在上述约束条件下计算。
答案 0 :(得分:5)
由于不清楚是否只想从平均值中排除极限以外的点,或者决定是否进行平均,我将解决这两个问题。您可以使用以下函数对consider
函数的结果进行后处理(它们非常具体,基于您的数据格式):
filter[data : {{_, _} ..}, {min_, max_}] :=
Select[data, min < #[[1]] < max && min < #[[2]] < max &]
dataWithinLimitsQ[data : {{_, _} ..}, {min_, max_}] :=
data == filter[data, {min, max}]
meanFiltered[data : {{_, _} ..}, {min_, max_}] :=
Mean@filter[data, {min, max}]
以下是如何使用它们:
In[365]:= dalist=Join[Tuples[Range[4],2]\[Transpose],{Range[16],Range[17,32,1]}]\[Transpose]
Out[365]= {{1,1,1,17},{1,2,2,18},{1,3,3,19},{1,4,4,20},{2,1,5,21},{2,2,6,22},{2,3,7,23},
{2,4,8,24},{3,1,9,25},{3,2,10,26},{3,3,11,27},{3,4,12,28},{4,1,13,29},{4,2,14,30},{4,3,15,31},
{4,4,16,32}}
In[378]:= considered = consider[dalist,1,1,{3,4}]
Out[378]= {{1,17},{2,18},{3,19},{4,20}}
In[379]:= filter[considered,{2,21}]
Out[379]= {{3,19},{4,20}}
In[380]:= dataWithinLimitsQ[considered,{2,21}]
Out[380]= False
In[381]:= meanFiltered[considered,{2,21}]
Out[381]= {7/2,39/2}
答案 1 :(得分:2)
我会使用Cases
:
inRange[data_, {min_, max_}] := Cases[data, {__?(min < # < max &)}, 1]
此表单还接受具有任意列数的数据。
dat = {{1, 2, 0}, {6, 7, 4}, {6, 7, 7}, {4, 5, 6}, {4, 5, 3}, {9, 7, 1}, {0, 3, 7}, {6, 2, 1}}
inRange[dat, {2, 7}]
(* Out = {{4, 5, 6}, {4, 5, 3}} *)