【问题标题】:Splitting Data with query to calculate formulas only works on one column使用查询拆分数据以计算公式仅适用于一列
【发布时间】:2020-03-10 10:42:15
【问题描述】:

我有数据表,如果需要,我会为未来的数据提供更多数据集区域。我有多个公式在仅使用该范围内的一列时起作用。如果范围超过一列,但数据在第一列,则会出错。如果数据在定义范围内的第二列或更多列中,则只会计算第一列。

注意:我将数据压缩为一个值,并用一个值表示的数量如下所示: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), "♦"))))

这适用于中位数、众数、标准偏差和平均偏差。但是,它绝对不适用于 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

【问题讨论】:

    标签: google-sheets google-sheets-formula google-query-language iqr


    【解决方案1】:

    将列连接在一起,而不是单独拼接每列的公式。使用将列连接在一起什么使用{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}

    【讨论】:

      猜你喜欢
      • 2019-04-29
      • 2011-04-04
      • 2022-11-15
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多