2

次の関数を使用して、リストに対して条件付き操作を実行します。

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];

ここに画像の説明を入力

以下を使用して、関数によって定義された特定の列の手段を取得します。これにより、列1の対応するエントリが2に等しい列3および4のエントリの平均が出力されます

Mean@consider[dalist, 1, 2, {3, 4}]

ここに画像の説明を入力

ここで、平均化する値に制約/しきい値を追加したいと思います。

次の場合に値を平均します。

  • minValue を超える (例: 3)
  • maxValue 未満 (例: 25)

以下に、上記の制約の下で平均値を計算する必要がある値の例を示します。

ここに画像の説明を入力

4

2 に答える 2

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}
于 2011-06-08T16:03:47.697 に答える
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}} *)
于 2011-06-09T13:25:36.053 に答える