获得列的三分之一,三分之一和三分之一的平均值

我有一个数字列和一个参考列。 我试图将数字列分成前三分之一,二分之三和后三分之一,并取每个的平均值。

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中的行号。

  1. C2 = =CountIf($B$2:$B2, $B2) ,fill down =>值应该是{1,2,3,1,2,3,4,5,6,1,2}
  2. E1 = sheep
  3. E2 = =CountIf($B:$B, $E$1) => 6
  4. E3 = {=Average(If(($B:$B = $E$1) * ($C:$C <= $E$2 / 3), $A:$A))} (注意这是一个数组公式,由{}指定)=> 1.55
  5. E3 = {=Average(If(($B:$B = $E$1) * ($C:$C > $E$2 / 3) * ($C:$C <= 2 * $E$2 / 3), $A:$A))} => 1.85
  6. 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中的数字,可以将分数更改为一半,四分之一等。