【问题标题】:How do I create an arrayformula to calculate the median of three different values from one row?如何创建一个数组公式来计算一行中三个不同值的中位数?
【发布时间】:2020-07-22 05:32:52
【问题描述】:

如何创建一个数组公式来计算谷歌表格中一行中三个不同值的中位数? 例如,我想为 MEDIAN 公式做 ARRAYFORMULA。

=ARRAYFORMULA(MEDIAN(A2:A,$B$2,$C$2))

在哪里
A2:开始日期 - 2020-07-22 10:00
B2:开始时间 - 8:00
C2:结束时间 - 17:30

而 MEDIAN(A2:A,B2,C2) 的结果是 10:00,但 ARRAYFORMULA 不起作用。 (结果是 00:00:00)
是否可以为 MEDIAN 制作一个数组?或者有其他选择吗?

【问题讨论】:

  • A2:A 是什么范围引用?那是错字吗?另外,A2 是否有日期和时间部分?请更好地描述您的数据。
  • MEDIAN 在 ARRAYFORMULA 下不受支持。您是否考虑过使用平均值而不是中位数?
  • @teylyn i A2:A 是错字。 A2 有日期和时间部分。 2020-07-22 是日期,10:00 是时间。
  • @player0 我没有考虑平均水平。所以我会尝试使用它。
  • 亚当,如果我记得你的第一个问题,对于A2,你真的只关心时间部分。在这里包含日期部分可能会令人困惑。你有 mod(A2,1),所以你真的想要三个时间值的 MEDIAN 或 AVERAGE,不是吗?理想情况下是一个 ARRAYFORMULA,这样它就可以填满整个列......

标签: google-sheets google-sheets-formula array-formulas median


【解决方案1】:

平均值和中位数不相同。 Mean 本质上是 AVERAGE,而 MEDIAN 是一组中“最中间”的值:

=AVERAGE(2,1,9) 返回 4 [即 (1+2+9)/4 ]

=MEDIAN(2,1,9) 返回 2(即,如果所有数字从低到高排列,则为中间的值)

如果您只需要比较三列,则可以使用一种“蛮力”值对值比较数组。例如,在 D2 中:

=ArrayFormula(IF(((A2:A-INT(A2:A)<B2:B)*(A2:A-INT(A2:A)>C2:C))+((A2:A-INT(A2:A)>B2:B)*(A2:A-INT(A2:A)<C2:C)),A2:A-INT(A2:A),IF((B2:B<(A2:A-INT(A2:A))*(B2:B>C2:C))+(B2:B>(A2:A-INT(A2:A))*(B2:B<C2:C)),B2:B,C2:C)))

英文是这样写的:

"如果第一个值低于第二个 AND 高于第三个,或者如果第一个值高于第二个 AND 低于第三个,则为中位数。返回第一个值。

如果两者都不成立,请检查第二个值是否低于第一个且高于第三个,或者第二个值是否高于第一个且低于第三个。如果是这样,它是中位数。返回第二个值。

如果到目前为止一切都不是真的,那么第三个值必须是中位数。返回第三个值。”

另外一件事是你会注意到我有E2:E-INT(E2:E)。这去掉了日期部分,只留下时间,因为在 Google 表格中,日期是整数,而时间是小于 1 的小数部分。因此,删除单元格值的整数(即整数)部分只留下小数部分,也就是时间。这是必要的,以便可以进行同类比较。

【讨论】:

    【解决方案2】:

    求平均值的数组公式:

    =ARRAYFORMULA(TEXT(QUERY(TRANSPOSE(QUERY(TRANSPOSE(N(A2:C*1)), 
     "select "&TEXTJOIN(",", 1, IF(A2:A="",,
     "avg(Col"&ROW(A2:A)-ROW(A2)+1&")"))&"")), 
     "select Col2"), "hh:mm"))
    

    【讨论】:

      猜你喜欢
      • 2021-06-05
      • 2018-10-16
      • 2014-11-05
      • 1970-01-01
      • 2017-01-03
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2021-02-17
      相关资源
      最近更新 更多