我想根据满足的条件确定一列中的值的中位数二其他列。我使用的是 MS Excel。
我知道我必须使用 IF 函数将 MEDIAN 函数处理为数组 (ctrl + shft + enter),如果我在 IF 语句中只使用 1 个条件,这种方法就可以正常工作。但是,一旦我尝试合并2使用 AND 函数的条件,我得到中位数为 0(即,它不起作用)。
如何根据多个其他列的匹配条件计算一列中的中值?
例子:
假设我想找到 A = 1 且 B = x 时 C 中的中值:
A B C
1 x 10
1 x 20
1 y 30
1 y 40
2 x 10
2 x 20
2 y 30
2 y 40
3 x 10
3 x 20
3 y 30
3 y 40
4 x 10
4 x 20
4 y 30
4 y 40
5 x 10
5 x 20
5 y 30
5 y 40
#Here is my attempt using IF and AND:
{=MEDIAN(IF(AND(A2:A21=1,B2:B21="x"),C2:C21))} #DEOSN'T WORK: should be 15, but it's 0
#subcomponents of above work fine on their own:
{=MEDIAN(IF(A2:A21=1,C2:C21)) } #equals 25 as expected
{=MEDIAN(IF(B2:B21="x",C2:C21))} #equals 15 as expected
我该如何使其工作以及/或者我应该使用其他方法吗?
答案1
避免使用该AND
函数,IF
而使用嵌套的 s。
具体来说:
=MEDIAN(IF(A2:A21=1,IF(B2:B21="x",C2:C21)))
问题是,它AND
在数组上下文中不能按照您的预期工作——它不会对AND
每对元素进行运算并生成一个数组,而是对两个数组的所有元素进行“与”运算以得出单个标量结果。
AND
您原来的公式正在评估对“ ”的单个输出的整个调用FALSE
(因为两个数组中的每个元素并非都满足比较)。
答案2
我不知道它为什么有效,但经过一番折腾后我发现以下方法可以实现我的目标:
{=MEDIAN(IF((A2:A21=1)*(B2:B21="x"),C2:C21))} #gives correct 15
(再次记住使用 ctrl + shft + enter 将其作为数组进行处理)
我的猜测是,该AND
函数默认只生成一个TRUE
或FALSE
,因此无法在此上下文中工作(这需要生成一个由 1 和 0 组成的数组)。但是,如果我将每一列作为其自己的数组进行处理,我会为每个子条件生成一个由 1 和 0 组成的字符串。如果我随后将多个条件数组相乘,结果本身就是一个由 1 和 0 组成的数组,其中只有当两个相应子条件的所需条件都为真时,1 才会存在。
我确信有人可以在评论中证实/解释这一点。