【问题标题】:How to take percentage rank of specific rows on conditional?如何在条件下获取特定行的百分比排名?
【发布时间】:2021-10-04 05:48:17
【问题描述】:

我想将一些数据转换为百分比排名,但是我怎样才能做到这一点,以便当另一列的值在同一行中时它只需要行的百分比排名?

我的数据:

821073  4086    woodland
1367182 8483    woodland
774315  3908    greenspace
3155757 9229    greenspace
2298996 9195    greenspace
1133531 5386    greenspace
1839304 6111    woodland
642198  3109    artificial_forest
642198  3109    artificial_forest
9727658 26260   artificial_forest
517463  2776    artificial_forest
3082246 8345    forest
1043860 6873    forest
1851161 5790    forest
762000  3633    greenarea
1575599 5980    greenarea
534234  2795    greenarea
1783711 5446    greenarea

在这个例子中,我想计算AreaPerimtr 的平均百分比排名,这些值是Artificial_forestgreen_area,我试过了:

=AVERAGE(PERCENTRANK.INC($F$8:$F$11, $F$15:$F$18,F8, F15))

我最终得到woodland, greenspace, forest 的重复值,我怎样才能得到它以便它只取artificial_forestgreenarea 的平均百分比排名,它在其他地方返回NA0

【问题讨论】:

  • 很难跟上。 PERCENTRANK.INC 将返回单个值。它有两个参数和一个可选参数,你用四个参数显示它。 AVERAGE 将返回来自 PERCENTRANK.INC 的单个结果的平均值,因此它什么也不做。您能否截取您的范围,以便更好地理解它们?如果我猜的话,我会说你需要像这样嵌套一个 IF:=PERCENTRANK.INC(IF(OR($C$2:$C$19={"greenarea","artificial_forest"}),$A$2:$A$19),A2,2)
  • 向我们展示预期的结果也会很有用。
  • @markfitzpatrick - 同意; “平均”这个词的使用让我有点吃惊——尤其是考虑到 OP 的公式,它建议计算度量(百分比)与给定值的关系——人们只能假设相对于第一次出现在过滤后的数组,但即使这个假设也是有问题的,即 =AVERAGE(PERCENTRANK.INC($F$8:$F$11, $F$15:$F$18,F8, F15)) - 我已经完成了唯一有意义的事情 - 返回一个数组以及该数组的平均值(可以使用数组上的索引检索特定值)......让我们看看 OP 怎么想...

标签: excel excel-formula percentage


【解决方案1】:

修订后的 SOLN

截图/here参考:

鉴于 Office 365 可用(每条评论 @Stackbeans,t-19hrs),将两个 percentranks 合并到一个数组中的更简洁方法如下(屏幕截图,此处参考):

=SORT(IFERROR(PERCENTRANK.INC(FILTER(B4:C21,$D$4:$D$21=$G$4),FILTER(B4:C21,$D$4:$D$21=$G$4)),""),,1)

可以直接确定平均值,而无需复制此“数组/溢出类型”方程,如下所示:

区域

=AVERAGE(INDEX(SORT(IFERROR(PERCENTRANK.INC(FILTER(B4:C21,$D$4:$D$21=$G$4),FILTER(B4:C21,$D$4:$D$21=$G$4)),""),,1),0,1))

周长

=AVERAGE(INDEX(SORT(IFERROR(PERCENTRANK.INC(FILTER(B4:C21,$D$4:$D$21=$G$4),FILTER(B4:C21,$D$4:$D$21=$G$4)),""),,1),0,2))

OR如果要在 excel 中复制和显示数组,那么这会稍微简化平均值的公式:

=AVERAGE(INDEX(R3#,0,2))

(使用average(index(r3#,0,1)) 表示区域)



奖金

要包含验证列表下拉菜单(请参阅下面的屏幕截图)

  1. 创建查找列表,例如=UNIQUE(D4:D21) 在 N3 单元格中
  2. 在主功能区的“公式”部分中选择名称管理器:

  1. 在弹出的 GUI 中,选择“new”,输入名称(此处为“Name_Lookup”)和参考方程式(此处为 = $N$3#),注意最后的 #,这使其成为适用于“spill”的动态范围-type' 范围/数组...

  1. 点击“关闭”以返回到弹出窗口的第一个窗口,并通过单击 Gui 中等式栏附近右侧/底部的向上小箭头检查生成的命名范围的范围:

  1. 创建一个验证列表:单元格 G5:输入 alt + d + L(依次释放一个按钮,然后按下下一个按钮)。请参阅here 了解更多信息重新验证列表...

  2. 弹出GUI的第一个窗口,从下拉菜单中选择列表并输入相应的参考公式:= Name_Lookup,如下所示:

  1. 以不同的颜色突出显示单元格(不是必需的,但可使工作表对其他人更友好)...


原创作品

截图/here参考。

我只考虑“区域”——这可以很容易地以同样的方式扩展到 perimtr。

要返回与过滤结果的每个级别的 percentrank 对应的值数组,请使用:

=SORT(IFERROR(PERCENTRANK.INC(IF($D$4:$D$21=$G$4,B4:B21,""),IF($D$4:$D$21=$G$4,B4:B21,"")),""),,1)

要计算此数组中值的平均 percentrank,请使用:

=AVERAGE(IFERROR(PERCENTRANK.INC(IF($D$4:$D$21=$G$4,B4:B21,""),IF($D$4:$D$21=$G$4,B4:B21,"")),""))


备注

  • 查找功能需要 Excel 的 Office 365 兼容版本。不是基本功能(未要求),因此假设如果无法访问上述 Excel 版本,则可以忽略此功能...
  • 要检索数组中的单个值,请使用=INDEX(SORT(IFERROR(PERCENTRANK.INC(IF($D$4:$D$21=$G$4,B4:B21,""),IF($D$4:$D$21=$G$4,B4:B21,"")),""),,1),I1),其中最终组件 (I1 = 1,2,..) 表示所述索引的(有序)排名。

【讨论】:

  • 关于查找功能的问题 - 我在 Outlook 上使用最新的 Microsoft Office。这个查找功能可以实现吗?当我尝试复制上面的代码并在我的数据集中实现它时,虽然它失败了,但是当我复制我的数据块并将其粘贴到你提供的 Excel 电子表格中时,它工作得非常好。
  • 我对 excel 语法还很陌生,但你提到我可以同时获取区域和周边的百分比排名,这怎么做?对于您的第一个代码,我尝试将其包含在 Percentrank.inc IF 语句中,但是我得到了溢出。
  • 查看修改后的soln-upvote/downvote 并接受答案(或其他答案)以帮助未来的用户,ta
猜你喜欢
  • 1970-01-01
  • 2022-10-14
  • 2022-08-18
  • 2021-01-30
  • 1970-01-01
  • 1970-01-01
  • 2018-03-11
  • 1970-01-01
  • 2018-05-27
相关资源
最近更新 更多