获得列的三分之一,三分之一和三分之一的平均值
我有一个数字列和一个参考列。 我试图将数字列分成前三分之一,二分之三和后三分之一,并取每个的平均值。
Values Ref column 1.7 cow 2.3 cow 2.6 cow 1.8 sheep 1.3 sheep 2.2 sheep 1.5 sheep 1.2 sheep 2.3 sheep 1.5 goose 2.5 goose
所以,例如,“羊”,前两个和后两个的前两个值的平均值。 换句话说,我想把“羊”旁边的每个细胞的平均数作为1/3。
添加一列来累计您正在查看的单词的实例,然后检查AVERAGE
中的行号。
- C2 =
=CountIf($B$2:$B2, $B2)
,fill down =>值应该是{1,2,3,1,2,3,4,5,6,1,2}
- E1 =
sheep
- E2 =
=CountIf($B:$B, $E$1)
=>6
- E3 =
{=Average(If(($B:$B = $E$1) * ($C:$C <= $E$2 / 3), $A:$A))}
(注意这是一个数组公式,由{}
指定)=>1.55
- E3 =
{=Average(If(($B:$B = $E$1) * ($C:$C > $E$2 / 3) * ($C:$C <= 2 * $E$2 / 3), $A:$A))}
=>1.85
- E3 =
{=Average(If(($B:$B = $E$1) * ($C:$C > 2 * $E$2 / 3), $A:$A))}
=>1.75
如果我没有记错,数组公式(如果我没有记错的话)与普通公式相同(不包括自动input的{}
),但在完成时按Enter键 (可能还有Shift )。
注意 – 这些看在整个专栏。 您可以通过将$A:$A
更改$A:$A
$A$2:$A$12
(同样对于$B:$B
和$C:$C
)来加速它们。 请记住,对于附加到此列表的任何数据,您需要更新公式; 但是你可以插入数据到列表的中间,它会自动更新它们。
使用这样的公式:
=AVERAGE(INDEX(A:A,MATCH($D$2,B:B,0)+(D3-1)*COUNTIF(B:B,$D$2)/3):INDEX(A:A,MATCH($D$2,B:B,0)+((D3)*COUNTIF(B:B,$D$2)/3)-1))
这确实需要对ref列进行sorting,并将引用分组。
即使没有sorting,此数组公式也会返回平均值:
=AVERAGE(INDEX(INDEX(A:A,N(IF({1},MODE.MULT(IF($B$1:$B$12=$D$2,ROW($A$1:$A$12)*{1,1}))))),N(IF({1},ROW(INDEX(A:A,1+(D3-1)*COUNTIF(B:B,$D$2)/3):INDEX(A:A,D3*COUNTIF(B:B,$D$2)/3))))))
在退出编辑模式时,需要使用Ctrl-Shift-Enter而不是Enter键input数组公式。
那么假设有7个羊的价值,你想做一个加权平均值(例如,第一个平均值将从前两个羊加上第三个羊的三分之一计算)?
我已经尝试了一个通用的解决scheme,把任何数量的动物分成任意数量的分数并find它们的平均值。 我的方法是使用来自@Barry Houdini的优雅重叠公式,并计算间隔之间的重叠(在7个动物的情况下分成3个):
0 to 2.33 2.33 to 4.67 4.67 to 7
和动物的数量
0 to 1 1 to 2 2 to 3
等等。
在H4
=IF(ROWS($1:1)<=$H$2,ROWS($1:1)/$H$2*COUNTIF(B$2:B$16,$G$2),"")
在G4
=IF(H4="","",H4-COUNTIF(B$2:B$16,$G$2)/$H$2)
I4中的主要公式是
=IF(H4="","",SUM(TEXT(IF(C$2:C$16<H4,C$2:C$16,H4)-IF((C$2:C$16-1)>G4,C$2:C$16-1,G4),"general;\0") *A$2:A$16*(B$2:B$16=$G$2))/(COUNTIF(B$2:B$16,$G$2)/$H$2))
作为数组公式input。
通过改变H2中的数字,可以将分数更改为一半,四分之一等。