Разделение данных с помощью запроса для расчета формул работает только для одного столбца. - PullRequest
0 голосов
/ 10 марта 2020

У меня есть листы данных, которые я предоставляю больше области набора данных для будущих данных, если это будет необходимо. У меня есть несколько формул, которые работают, когда он использует только один столбец в диапазоне. Если диапазон больше одного столбца, но данные находятся в первом столбце, это дает ошибку. Если данные находятся во втором или более столбце в пределах определенного диапазона, он будет вычислять только первый столбец.

ПРИМЕЧАНИЕ : у меня есть данные, сжатые в качестве значения и количество, обозначенное значением, как показано: VALUE (X), и я хочу сохранить его таким, поскольку таблица данных очень велика и все значения вводятся.

Примеры формул работают с одним столбцом диапазона:

Медиана

=ARRAYFORMULA(MEDIAN(TRANSPOSE(SPLIT(QUERY(REPT( INDEX(IF(B18:B="",,SPLIT(IF(ISNUMBER(B18:B), B18:B&" 1", B18:B), " ()"))*1,,1)&"♦", INDEX(IF(B18:B="",,SPLIT(IF(ISNUMBER(B18:B), B18:B&" 1", B18:B), " ()"))*1,,2)),,999^99), "♦"))))

Если я попытаюсь увеличить диапазон B18:F, формула будет работать только с двумя или более заполненными столбцами. Он также будет рассчитываться только для первого столбца.

Единственное рабочее решение - добавить каждый транспонированный столбец в этот диапазон MEDIAN( data here ) Пример ниже:

=ARRAYFORMULA(MEDIAN(

TRANSPOSE(SPLIT(QUERY(REPT( INDEX(IF(B18:B="",,SPLIT(IF(ISNUMBER(B18:B), B18:B&" 1", B18:B), " ()"))*1,,1)&"♦", INDEX(IF(B18:B="",,SPLIT(IF(ISNUMBER(B18:B), B18:B&" 1", B18:B), " ()"))*1,,2)),,999^99), "♦")),
TRANSPOSE(SPLIT(QUERY(REPT( INDEX(IF(C18:C="",,SPLIT(IF(ISNUMBER(C18:C), C18:C&" 1", C18:C), " ()"))*1,,1)&"♦", INDEX(IF(C18:C="",,SPLIT(IF(ISNUMBER(C18:C), C18:C&" 1", C18:C), " ()"))*1,,2)),,999^99), "♦")),
TRANSPOSE(SPLIT(QUERY(REPT( INDEX(IF(D18:D="",,SPLIT(IF(ISNUMBER(D18:D), D18:D&" 1", D18:D), " ()"))*1,,1)&"♦", INDEX(IF(D18:D="",,SPLIT(IF(ISNUMBER(D18:D), D18:D&" 1", D18:D), " ()"))*1,,2)),,999^99), "♦")),
TRANSPOSE(SPLIT(QUERY(REPT( INDEX(IF(E18:E="",,SPLIT(IF(ISNUMBER(E18:E), E18:E&" 1", E18:E), " ()"))*1,,1)&"♦", INDEX(IF(E18:E="",,SPLIT(IF(ISNUMBER(E18:E), E18:E&" 1", E18:E), " ()"))*1,,2)),,999^99), "♦")),
TRANSPOSE(SPLIT(QUERY(REPT( INDEX(IF(F18:F="",,SPLIT(IF(ISNUMBER(F18:F), F18:F&" 1", F18:F), " ()"))*1,,1)&"♦", INDEX(IF(F18:F="",,SPLIT(IF(ISNUMBER(F18:F), F18:F&" 1", F18:F), " ()"))*1,,2)),,999^99), "♦"))))

Это работает для Median, Mode Стандартное отклонение и среднее отклонение. Тем не менее, это абсолютно не будет работать на IQR. Я не уверен, почему.

IQR

=ARRAYFORMULA(QUARTILE(TRANSPOSE(SPLIT(QUERY(REPT( INDEX(IF(B18:B="",,SPLIT(IF(ISNUMBER(B18:B), B18:B&" 1", B18:B), " ()"))*1,,1)&"♦", INDEX(IF(B18:B="",,SPLIT(IF(ISNUMBER(B18:B), B18:B&" 1", B18:B), " ()"))*1,,2)),,999^99), "♦")),
TRANSPOSE(SPLIT(QUERY(REPT( INDEX(IF(C18:C="",,SPLIT(IF(ISNUMBER(C18:C), C18:C&" 1", C18:C), " ()"))*1,,1)&"♦", INDEX(IF(C18:C="",,SPLIT(IF(ISNUMBER(C18:C), C18:C&" 1", C18:C), " ()"))*1,,2)),,999^99), "♦")),
TRANSPOSE(SPLIT(QUERY(REPT( INDEX(IF(D18:D="",,SPLIT(IF(ISNUMBER(D18:D), D18:D&" 1", D18:D), " ()"))*1,,1)&"♦", INDEX(IF(D18:D="",,SPLIT(IF(ISNUMBER(D18:D), D18:D&" 1", D18:D), " ()"))*1,,2)),,999^99), "♦")),
TRANSPOSE(SPLIT(QUERY(REPT( INDEX(IF(E18:E="",,SPLIT(IF(ISNUMBER(E18:E), E18:E&" 1", E18:E), " ()"))*1,,1)&"♦", INDEX(IF(E18:E="",,SPLIT(IF(ISNUMBER(E18:E), E18:E&" 1", E18:E), " ()"))*1,,2)),,999^99), "♦")),
TRANSPOSE(SPLIT(QUERY(REPT( INDEX(IF(F18:F="",,SPLIT(IF(ISNUMBER(F18:F), F18:F&" 1", F18:F), " ()"))*1,,1)&"♦", INDEX(IF(F18:F="",,SPLIT(IF(ISNUMBER(F18:F), F18:F&" 1", F18:F), " ()"))*1,,2)),,999^99), "♦")), 3)-QUARTILE(TRANSPOSE(SPLIT(QUERY(REPT( INDEX(IF(B18:B="",,SPLIT(IF(ISNUMBER(B18:B), B18:B&" 1", B18:B), " ()"))*1,,1)&"♦", INDEX(IF(B18:B="",,SPLIT(IF(ISNUMBER(B18:B), B18:B&" 1", B18:B), " ()"))*1,,2)),,999^99), "♦")),
TRANSPOSE(SPLIT(QUERY(REPT( INDEX(IF(C18:C="",,SPLIT(IF(ISNUMBER(C18:C), C18:C&" 1", C18:C), " ()"))*1,,1)&"♦", INDEX(IF(C18:C="",,SPLIT(IF(ISNUMBER(C18:C), C18:C&" 1", C18:C), " ()"))*1,,2)),,999^99), "♦")),
TRANSPOSE(SPLIT(QUERY(REPT( INDEX(IF(D18:D="",,SPLIT(IF(ISNUMBER(D18:D), D18:D&" 1", D18:D), " ()"))*1,,1)&"♦", INDEX(IF(D18:D="",,SPLIT(IF(ISNUMBER(D18:D), D18:D&" 1", D18:D), " ()"))*1,,2)),,999^99), "♦")),
TRANSPOSE(SPLIT(QUERY(REPT( INDEX(IF(E18:E="",,SPLIT(IF(ISNUMBER(E18:E), E18:E&" 1", E18:E), " ()"))*1,,1)&"♦", INDEX(IF(E18:E="",,SPLIT(IF(ISNUMBER(E18:E), E18:E&" 1", E18:E), " ()"))*1,,2)),,999^99), "♦")),
TRANSPOSE(SPLIT(QUERY(REPT( INDEX(IF(F18:F="",,SPLIT(IF(ISNUMBER(F18:F), F18:F&" 1", F18:F), " ()"))*1,,1)&"♦", INDEX(IF(F18:F="",,SPLIT(IF(ISNUMBER(F18:F), F18:F&" 1", F18:F), " ()"))*1,,2)),,999^99), "♦")), 1))

Я пытался уменьшить диапазон, используя {B18:B,C18:C,D18:D,E18:E,F18:F} с ни один из них не работает, если не один столбец B18:B.

Может ли формула заглянуть внутрь диапазона, в котором находится более одного столбца, в котором остальные столбцы пусты? По сути, уменьшение формулы.

Почему IQR не использует все данные в каждом диапазоне в качестве дыры для вычисления IQR. (Данные возвращают 6 значений вместо 2)

Спасибо.

https://docs.google.com/spreadsheets/d/1byR6Aw3lTImxNHDynTm5S1MWjpxmCuMyNl5WT9PcC1E/edit?usp=sharing

1 Ответ

0 голосов
/ 10 марта 2020

Для объединения столбцов, а не для объединения формул для каждого столбца независимо. Использование объединения столбцов вместе с использованием {Range;Range}.

Приведенный выше пример меньше и объединяет столбцы как один в диапазоне по вертикали.

Использование: Медиана

=ARRAYFORMULA(MEDIAN(TRANSPOSE(SPLIT(QUERY(REPT( INDEX(IF({A13:A;B13:B;C13:C;D13:D;E13:E}="",,SPLIT(IF(ISNUMBER({A13:A;B13:B;C13:C;D13:D;E13:E}), {A13:A;B13:B;C13:C;D13:D;E13:E}&" 1", {A13:A;B13:B;C13:C;D13:D;E13:E}), " ()"))*1,,1)&"♦", INDEX(IF({A13:A;B13:B;C13:C;D13:D;E13:E}="",,SPLIT(IF(ISNUMBER({A13:A;B13:B;C13:C;D13:D;E13:E}), {A13:A;B13:B;C13:C;D13:D;E13:E}&" 1", {A13:A;B13:B;C13:C;D13:D;E13:E}), " ()"))*1,,2)),,999^99), "♦"))))

С вниманием к: {A13:A;B13:B;C13:C;D13:D;E13:E}

...