繁体   English   中英

如何创建一个数组公式来计算一行中三个不同值的中位数?

[英]How do I create an arrayformula to calculate the median of three different values from one row?

你如何创建一个数组公式来计算谷歌表格中一行的三个不同值的中位数? 例如,我想为 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 制作一个数组? 或者是否有任何选择以其他方式做到这一点?

平均值和中位数不一样。 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)))

在英语中,这说:

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

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

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

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

平均值的数组公式:

=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"))

在此处输入图像描述

MEDIAN的 arrayformula 现在可以:

=IFERROR(BYROW(A2:C10, LAMBDA(xx, TEXT(MEDIAN(xx), "hh:mm"))))

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM