Я использую следующую функцию для выполнения условной операции над списком:
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 и 4, для которых соответствующая запись в столбце 1 равна 2.
Mean@consider[dalist, 1, 2, {3, 4}]
Теперь я хотел бы добавить ограничения/пороги для усредняемых значений:
Усреднить значения, если они равны:
- Выше minValue (например, 3)
- Ниже maxValue (например, 25)
Ниже приводится пример значений, среднее значение которых должно быть рассчитано при указанных выше ограничениях.
Select
сам по себе возвращает именно то, что вы ищете, посколькуMapThread[{#1, #2}&, ...]
иTranspose
являются точными инверсиями друг друга. - person rcollyer   schedule 08.06.2011{conditionCOL, conditionVAL}={1,1}
. Какое отфильтрованное среднее значение вы ожидаете от этого? Есть два способа интерпретировать это: оба столбца должны соответствовать критериям фильтрации, что дает среднее значение{4,20}
, или каждый столбец фильтруется независимо, что дает среднее значение{4, 37/2}
. Текущие ответы дают первый результат, в то время как я подозреваю, что вы хотите последнего. - person rcollyer   schedule 10.06.2011