Excel:求解数组间差值的标准差(多列的平均值)
Excel: Solve the Standard Deviation of the Difference Between Arrays (Averages of Multiple Columns)
我有一个矩阵:
A B C D E F
4 10 2 2 1 1
3 7 9
2 6 6
2 10 2 0 4
2 0 1 6 5
2 6 4 5 0 6
3 8
5 1 10 2 2 8
我想找出列 A:C 和 D:F 的平均值之间的行差异的标准差 (STDEV.S)
。至关重要的是,我只想为 A:C 和 D:F 列中具有完整条目的行计算此值(例如,没有空格)。
在本例中,标准偏差为 1.9。让我们分解一下。首先,我们确定列 A:C 和 D:F 的行平均(参见下面的 G 和 H 列)。请注意,这仅针对第 1、7 和 9 行进行了计算,因为它们是唯一在列 A:F:
中具有完整数据的行
A B C D E F G H
4 10 2 2 1 1 5.3 1.3
3 7 9
2 6 6
2 10 2 0 4
2 0 1 6 5
2 6 4 5 0 6 4 3.7
3 8
5 1 10 2 2 8 5.3 4
然后我们取 G 列和 H 列之间的行差异(见 I 列):
A B C D E F G H I
4 10 2 2 1 1 5.3 1.3 4
3 7 9
2 6 6
2 10 2 0 4
2 0 1 6 5
2 6 4 5 0 6 4 3.7 0.3
3 8
5 1 10 2 2 8 5.3 4 1.3
最后计算第I列的标准差,即1.9。
我希望在单个数组公式中实现这一点。我已经尝试了以下但失败了:
尝试 1:
{=STDEV.S(AVERAGE(IF(SUBTOTAL(2,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))=COLUMNS(A1:A1),IF(SUBTOTAL(2,OFFSET(D1,ROW(D1:D9)-ROW(D1),0,1,COLUMNS(D1:F1)))=COLUMNS(D1:F1),SUBTOTAL(1,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))))))-(AVERAGE(IF(SUBTOTAL(2,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))=COLUMNS(A1:C1),IF(SUBTOTAL(2,OFFSET(D1,ROW(D1:D9)-ROW(D1),0,1,COLUMNS(D1:F1)))=COLUMNS(D1:F1),SUBTOTAL(1,OFFSET(D1,ROW(D1:D9)-ROW(D1),0,1,COLUMNS(D1:F1)))))))}
结果#DIV/0!使用 Ctrl + Shift + Enter
输入后出现警告
尝试 2:
我使用以下公式成功计算了两列(而不是两个平均列)之间差异的标准差(在这种情况下,我们对 A 列和 B 列之间差异的标准差感兴趣):
{=STDEV(IF(A1:A9<>"",IF(B1:B9<>"",A1:A9-B1:B9)))}
我自己不能完全适应这段代码,但也许有人会发现它有用。
如有任何建议,我们将不胜感激。
主要问题是您正在使用 SUBTOTAL(1... 来获取 A-C 列的平均值并分别获取 D-F 列的平均值,但随后还使用 AVERAGE 来获取平均值的平均值 - 太过分了。结果是您尝试获取单个数字的标准偏差,它给您 #DIV/0!
如果你把它们去掉并做一些小的调整,你会得到
=STDEV.S(IF(SUBTOTAL(2,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))=COLUMNS(A1:C1),IF(SUBTOTAL(2,OFFSET(D1,ROW(D1:D9)-ROW(D1),0,1,COLUMNS(D1:F1)))=COLUMNS(D1:F1),SUBTOTAL(1,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))))-IF(SUBTOTAL(2,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))=COLUMNS(A1:C1),IF(SUBTOTAL(2,OFFSET(D1,ROW(D1:D9)-ROW(D1),0,1,COLUMNS(D1:F1)))=COLUMNS(D1:F1),SUBTOTAL(1,OFFSET(D1,ROW(D1:D9)-ROW(D1),0,1,COLUMNS(D1:F1))))))
结果为 1.3。为什么这是错误的答案?不幸的是,当您在 cols A-C 或 D-F 中得到一个空白单元格时,您的 If 语句评估为 FALSE,并且在某些情况下您最终得到 FALSE-FALSE,其评估为 0 并为您提供一个包含在 STDEV 中并给出错误的数值结果。
你可以通过重构公式来解决,换句话说
If first block is complete
If second block is complete
Calculate and subtract means
Take Stdev of result
给出
=STDEV.S(
IF(SUBTOTAL(2,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))=COLUMNS(A1:C1),
IF(SUBTOTAL(2,OFFSET(D1,ROW(D1:D9)-ROW(D1),0,1,COLUMNS(D1:F1)))=COLUMNS(D1:F1),
SUBTOTAL(1,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))-SUBTOTAL(1,OFFSET(D1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(D1:F1)))))
)
我有一个矩阵:
A B C D E F
4 10 2 2 1 1
3 7 9
2 6 6
2 10 2 0 4
2 0 1 6 5
2 6 4 5 0 6
3 8
5 1 10 2 2 8
我想找出列 A:C 和 D:F 的平均值之间的行差异的标准差 (STDEV.S)
。至关重要的是,我只想为 A:C 和 D:F 列中具有完整条目的行计算此值(例如,没有空格)。
在本例中,标准偏差为 1.9。让我们分解一下。首先,我们确定列 A:C 和 D:F 的行平均(参见下面的 G 和 H 列)。请注意,这仅针对第 1、7 和 9 行进行了计算,因为它们是唯一在列 A:F:
中具有完整数据的行A B C D E F G H
4 10 2 2 1 1 5.3 1.3
3 7 9
2 6 6
2 10 2 0 4
2 0 1 6 5
2 6 4 5 0 6 4 3.7
3 8
5 1 10 2 2 8 5.3 4
然后我们取 G 列和 H 列之间的行差异(见 I 列):
A B C D E F G H I
4 10 2 2 1 1 5.3 1.3 4
3 7 9
2 6 6
2 10 2 0 4
2 0 1 6 5
2 6 4 5 0 6 4 3.7 0.3
3 8
5 1 10 2 2 8 5.3 4 1.3
最后计算第I列的标准差,即1.9。
我希望在单个数组公式中实现这一点。我已经尝试了以下但失败了:
尝试 1:
{=STDEV.S(AVERAGE(IF(SUBTOTAL(2,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))=COLUMNS(A1:A1),IF(SUBTOTAL(2,OFFSET(D1,ROW(D1:D9)-ROW(D1),0,1,COLUMNS(D1:F1)))=COLUMNS(D1:F1),SUBTOTAL(1,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))))))-(AVERAGE(IF(SUBTOTAL(2,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))=COLUMNS(A1:C1),IF(SUBTOTAL(2,OFFSET(D1,ROW(D1:D9)-ROW(D1),0,1,COLUMNS(D1:F1)))=COLUMNS(D1:F1),SUBTOTAL(1,OFFSET(D1,ROW(D1:D9)-ROW(D1),0,1,COLUMNS(D1:F1)))))))}
结果#DIV/0!使用 Ctrl + Shift + Enter
输入后出现警告尝试 2:
我使用以下公式成功计算了两列(而不是两个平均列)之间差异的标准差(在这种情况下,我们对 A 列和 B 列之间差异的标准差感兴趣):
{=STDEV(IF(A1:A9<>"",IF(B1:B9<>"",A1:A9-B1:B9)))}
我自己不能完全适应这段代码,但也许有人会发现它有用。
如有任何建议,我们将不胜感激。
主要问题是您正在使用 SUBTOTAL(1... 来获取 A-C 列的平均值并分别获取 D-F 列的平均值,但随后还使用 AVERAGE 来获取平均值的平均值 - 太过分了。结果是您尝试获取单个数字的标准偏差,它给您 #DIV/0!
如果你把它们去掉并做一些小的调整,你会得到
=STDEV.S(IF(SUBTOTAL(2,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))=COLUMNS(A1:C1),IF(SUBTOTAL(2,OFFSET(D1,ROW(D1:D9)-ROW(D1),0,1,COLUMNS(D1:F1)))=COLUMNS(D1:F1),SUBTOTAL(1,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))))-IF(SUBTOTAL(2,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))=COLUMNS(A1:C1),IF(SUBTOTAL(2,OFFSET(D1,ROW(D1:D9)-ROW(D1),0,1,COLUMNS(D1:F1)))=COLUMNS(D1:F1),SUBTOTAL(1,OFFSET(D1,ROW(D1:D9)-ROW(D1),0,1,COLUMNS(D1:F1))))))
结果为 1.3。为什么这是错误的答案?不幸的是,当您在 cols A-C 或 D-F 中得到一个空白单元格时,您的 If 语句评估为 FALSE,并且在某些情况下您最终得到 FALSE-FALSE,其评估为 0 并为您提供一个包含在 STDEV 中并给出错误的数值结果。
你可以通过重构公式来解决,换句话说
If first block is complete
If second block is complete
Calculate and subtract means
Take Stdev of result
给出
=STDEV.S(
IF(SUBTOTAL(2,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))=COLUMNS(A1:C1),
IF(SUBTOTAL(2,OFFSET(D1,ROW(D1:D9)-ROW(D1),0,1,COLUMNS(D1:F1)))=COLUMNS(D1:F1),
SUBTOTAL(1,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))-SUBTOTAL(1,OFFSET(D1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(D1:F1)))))
)