我在数据透视表中有一个很大的数据表,其中包含许多数字值,我想按以下方式对“重量”列中的值进行分组: 值小于
1000
1500
2000
3000
4000
5000
6000
etc...
然后在其旁边有一个“计数”列,计算有多少个小于1000,小于1500的值,依此类推。这是一个非常大的表,将具有成千上万个值,这就是为什么将它们压缩起来要容易得多的原因。谢谢。
当前表:
Weight
3944
3300
1000
2993
442
9388
2992
2281
2991
所需表:
Weight Count
<1000 1
<1500 1
<2000 0
<3000 4
<4000 2
<5000 0
<6000 0
<7000 0
<8000 0
<8000 0
<9000 0
<10000 1
答案 0 :(得分:1)
一个无需添加任何辅助列即可解决的有趣问题...
这就是我要做的:
=INDEX(
FREQUENCY(
$A$2:$A$10,
RIGHT($C$2:$C$13,LEN($C$2:$C$13)-1)-1
),
MATCH($C2,$C$2:$C$13,0)
)
我将从内部函数开始,然后向外展开。
RIGHT($C$2:$C$13,LEN($C$2:$C$13)-1)-1
这将获取“重量(最大)”列中的字符串(例如“ <1000”),删除“ <”符号,并从结果中减去1(999,因为我们希望“小于” 1000,而不是“小于或等于” 1000)。
接下来,FREQUENCY函数接受2个参数。 首先是我们的实际重量范围。 第二个是一组用于将这些权重放入的不同截止值的数组(这是我们根据上面的公式得出的结果)。
因为FREQUENCY返回一个计数数组,所以我们必须使用INDEX选择希望返回的数组中的特定值。 INDEX的第一个参数是频率返回的值的数组。 第二个是我们希望返回的值的索引。我们可以通过多种方式实现这一目标:
我们可以使用ROW()-1,但是如果每次从表格顶部移动表格,表格都会损坏。 我们可以添加一个辅助列(包含增量数字)来记录“体重指数”,但是,我想尽可能地减少辅助列的数量,在这种情况下,可以通过以下简单方法解决:MATCH
我们只需使用MATCH即可返回重量列表中当前重量组的索引:
MATCH(<the current weight group>, <the complete weight group range>, <0 means we are looking for an exact match>)
我希望这是有道理的。当您进入数组时,事情变得复杂。如果您需要进一步说明,请告诉我。