Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Excel按优先规则集分组

Excel按优先规则集分组
EN

Stack Overflow用户
提问于 2017-07-13 09:48:42
回答 2查看 92关注 0票数 0

我想知道为什么没有人问这个问题,但是我如何根据优先规则集/树来对表中的条目进行分类呢?(可能使用裸excel,而不是嵌套的if级联)

最小示例(仅显示11个或更多功能中的3个)

代码语言:javascript
运行
AI代码解释
复制
Name      | IsCool | IsNerdy | HasChild
Joe       | 1      | 1       | 1
Charliese | 1      | 0       | 1 
Peter     | 1      | 0       | 0
Jonas     | 0      | 0       | 0

规则

代码语言:javascript
运行
AI代码解释
复制
Priority  | IsCool | IsNerdy | HasChild | => Group
1.        | 1      | 1       | ignore   | A (at least cool&nerdy)
2.        | ignore | ignore  | 1        | B (not A, but has a child)
3.        | 1      | 0       | 0        | C (only cool)
4.        | ignore | ignore  | ignore   | D (everything else)

stop after first match

屈服:

代码语言:javascript
运行
AI代码解释
复制
Name      | IsCool | IsNerdy | HasChild | Group
Joe       | 1      | 1       | 1        | A
Charliese | 1      | 0       | 1        | B
Peter     | 1      | 0       | 0        | C
Jonas     | 0      | 0       | 0        | D
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-14 03:44:34

您可以将“规则集”转换为属性(IsCool、IsNerdy、HasChild等)的所有可能组合,方法是将“忽略”处理为0(零)或1(单位)。

因此,问题规则集中的第一个规则将被两个规则所取代。

IsCool ¦ IsNerdy ¦ HasChild¦ Group 1 ¦ 1 ¦ 0 ¦ A 1 ¦ 1 ¦ 1 ¦ A

虽然在这三个属性中只有8种可能性,但这种方法可能导致8条以上的规则。例如,在问题的规则集中,当规则集中的“忽略”以这种方式扩展时,具有(1,1,1)给出的数据元组(IsCool,IsNerdy,HasChild)的人将匹配A组和B组。为了消除这种模糊,还需要应用优先级:A组的匹配优先级高于B,因此查找表将(1,1,1,1,A)作为一行,但不包括(1,1,1,B)。

有了更大的规则集,涉及更多属性,从规则表构建所需的VLOOKUP表的任务就不会没有问题,特别是如果需要一种非手动方法,并且只需要使用Excel,而不是将Excel与VBA结合使用。

替代方法不涉及VBA,它将规则集作为数据处理如下。

将上述表示法正式化后,涉及n个属性的规则可以表示为

代码语言:javascript
运行
AI代码解释
复制
(r[1],r[2],...,r[n],G)

其中r[i] (i=1,...,n)可以取01"ignore"的值,而G代表组(在问题的例子中是A、B、C或D中的一个)。

数据的实例可以类似地表示为

代码语言:javascript
运行
AI代码解释
复制
(d[1],d[2],...,d[n])

其中d[i] (i=1,...,n)01的值(而不是"ignore")

如果下列情况下,则匹配规则:

代码语言:javascript
运行
AI代码解释
复制
 r[i] = "ignore" OR "d[i] = r[i]" for each i from 1 to n

有一种很明显的方法在Excel中实现这一点

代码语言:javascript
运行
AI代码解释
复制
=AND(OR(r[1]="ignore",d[1]=r[1]),OR(r[2]="ignore",d[2]=r[2]),...,OR(r[n]="ignore",d[n]=r[n]))

当然,这里使用相关的单元格引用来代替上面所示的d[i]r[i]占位符,并且在AND中嵌套适当数量的OR来替换...速记。

上面的伪公式的值为TRUEFALSE,前者表示数据实例与规则匹配,后者表示不匹配。

然而,这并不是故事的结束,因为这些规则仍然需要按优先级顺序应用。

因此,进一步扩展表示法,假设规则按优先级顺序列出(规则1比规则2具有更高的优先级,规则3具有更高的优先级,等等)

如果单元格Ck保存了将k‘’th规则应用于数据实例的结果,那么修改上面的伪公式,使Ck现在有了公式。

代码语言:javascript
运行
AI代码解释
复制
=IF(OR(C[1],...,C[k-1]),FALSE,AND(...))

确保k‘the规则只能在没有匹配之前(因此是更高优先级)规则的情况下才能匹配。(在这里,IF的第三部分是前面提到的AND公式。)

下面的屏幕抓取显示了问题示例的实际操作方法。

蓝色的细胞是公式。第二个表中的TRUE/FALSE值实现了上面讨论的伪公式。例如,单元格F13显示了将规则1应用于数据实例(0,0,0)的结果,并有以下公式

代码语言:javascript
运行
AI代码解释
复制
=AND(OR($C$5="Ignore",$C$5=$C13),OR($D$5="Ignore",$D$5=$D13),OR($E$5="Ignore",$E$5=$E13))

注:不,如果需要围绕这个公式,因为没有比规则1更高优先级的规则。

单元格I13的公式显示了将规则4应用于同一个数据实例的结果,并需要考虑规则1、2和3所赋予的更高优先级。

代码语言:javascript
运行
AI代码解释
复制
=IF(OR($F13:H13),FALSE,AND(OR($C$8="Ignore",$C$8=$C13),OR($D$8="Ignore",$D$8=$D13),OR($E$8="Ignore",$E$8=$E13)))

细胞G13H13中的公式类似于I13 (左作为练习)的公式。

通过设计,每行最多可以有一个真值,如果规则集是正确的,则应该有一个这样的值。第二个表的最后一列中的公式对规则集进行了归纳,并简单地从第一个表的最后一列中选择了对应于哪个规则显示为真的相关值。

单元格J13中的公式是

代码语言:javascript
运行
AI代码解释
复制
=INDEX(F$5:F$8,SUMPRODUCT(1*(F13:I13),F$12:I$12))

范围F13:J13中的公式只是简单地将表的行复制到单元格F14:J20中。

票数 0
EN

Stack Overflow用户

发布于 2017-07-13 10:12:09

您可以通过在数据中创建一个键(例如,Joe = "111“、Charliese = "101”等)来做到这一点,然后它只是一个针对您的规则集的vlookup,其中包含所有键的可能组合。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45087747

复制
相关文章
在 JavaScript 中如何克隆对象?
我们假设一个变量 name 具有一个与之关联的原始值(number,string,boolean,undefined 和null)。 如果我们将此变量 name 复制到另一个变量name2 ,则原始变量的任何修改都不会影响到第二个变量,因为它们是原始值。
前端小智@大迁世界
2022/06/15
4.9K0
触发器在渗透中的利用
0x01 什么是触发器: 触发器对表进行插入、更新、删除的时候会自动执行的特殊存储过程。触发器一般用在check约束更加复杂的约束上面。触发器和普通的存储过程的区别是:触发器是当对某一个表进行操作。诸如:update、insert、delete这些操作的时候,系统会自动调用执行该表上对应的触发器。SQL Server 2005中触发器可以分为两类:DML触发器和DDL触发器,其中DDL触发器它们会影响多种数据定义语言语句而激发,这些语句有create、alter、drop语句。 0x02 问题描述: a)通
逸鹏
2018/04/09
1.5K0
触发器在渗透中的利用
详解JavaScript之神奇的Object.defineProperty
摘要: JavaScript有个很神奇的Object.defineProperty(),了解一下?
Fundebug
2018/07/05
6060
在 Kubernetes 中,如何动态配置本地存储?
Kubernetes 中使用节点的本地存储资源有 emptyDir、hostPath、Local PV 等几种方式。这之中,emptyDir 无法持久化数据,hostPath 方式需要手动管理卷的生命周期,运维压力大。因此在某些场景下,如果用户出于性能和运维成本考虑需要使用本地存储,Local PV 似乎是唯一选择。
CNCF
2019/12/05
3.5K0
在 Kubernetes 中,如何动态配置本地存储?
95 - 在Flask中如何使用动态路由
1. 静态路由和动态路由有什么区别? 路由 Utl Path http://loaclhost/abc/test.html 静态路由 Path与路由函数一一对应 动态路由 多个Path与同一个路由函数对应 http://loaclhost/abc/test.html http://loaclhost/xyz/test.html 不管访问哪一个Url,都会执行同一个服务端的路由函数 2. 如何使用Flask实现动态路由 ''' pip install flack ''' from flask import
ruochen
2021/06/27
5.6K0
95 - 在Flask中如何使用动态路由
在 Kubernetes 中,如何动态配置本地存储?
Kubernetes 中使用节点的本地存储资源有 emptyDir、hostPath、Local PV 等几种方式。这之中,emptyDir 无法持久化数据,hostPath 方式需要手动管理卷的生命周期,运维压力大。因此在某些场景下,如果用户出于性能和运维成本考虑需要使用本地存储,Local PV 似乎是唯一选择。
kubernetes中文社区
2019/08/27
3.2K0
在 Kubernetes 中,如何动态配置本地存储?
【译】如何避免在JavaScript中阻塞DOM
原文链接:https://www.sitepoint.com/avoiding-dom-blocking/
腾讯IVWEB团队
2020/06/28
2.9K0
JavaScript中动态生成表格
行:<input type="text" id="row" value="5"><br>
马克社区
2022/04/19
2.1K0
在直播app制作过程中,服务器是如何配置的?
不论是一对多直播还是一对一直播app制作,关于服务器的配置和成本是大多数运营商比较关心和头疼的问题。一般来说,在直播app运营的每个阶段,所安排的服务器台数和负责的功能都是不一样的。那么如何在有限的成本中搭配出高效的服务器模组?针对这个问题,小编今天就给各位初入直播行业的运营商说明一下。
就爱吃小笼包
2019/09/26
2K0
在直播app制作过程中,服务器是如何配置的?
利用PPT如何设计制作创意相框
很多人都希望自己的PPT能够独具匠心,在展示图片或制作电子相册时,总想让图片有个新颖、独特的相框,而PPT自带的图片边框显得“力不从心”。如果利用自选图形,再经过边线及内部填充等设置,就能够制作出具有创意效果的相框。下面iSlide就讲述微立体相框和水晶相框的制作技法。
纸醉金迷i
2022/01/27
4.2K0
利用PPT如何设计制作创意相框
Vue2.X是如何利用Object.defineProperty()实现数据绑定的
Vue2.X是如何利用Object.defineProperty()实现数据绑定的
伯约同学
2022/02/15
4800
经典笔试题-在HTML中如何包含JavaScript?
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
cwl_java
2019/11/20
2K0
如何制作自己的原生 JavaScript 路由
当你想到路由时,通常会想到类似 React 之类的库。但实际上,这些库和框架仍然使用 vanilla JavaScript。那么该怎么实现呢?
疯狂的技术宅
2020/03/27
4K0
利用c语言制作简易计算器
学了c语言之后,总想着能用c语言能制作一些简单的小工具来。而利用c语言来制作一款简易的计算器是一个不错的选择,用这款计算器可以计算的加、减、乘、除。
诸葛青云
2018/09/05
4.7K0
javascript 动态函数如何创建?
JavaScript作为一门动态语言,提供了多种创建动态函数的方法。动态函数的创建允许我们在运行时根据需要生成函数,从而实现灵活的编程和动态逻辑。本文将介绍动态函数的概念,探讨几种常用的方法来创建动态函数,并分享一些动态函数的应用场景。
海拥
2023/06/27
6760
javascript 动态函数如何创建?
如何采集javascript动态加载网页
从一个运行 javascript 的网站加载所有数据来加载内容,目前的问题是当运行启动代码时它无法加载 javascript 内容,因为用户应该向下滚动才能加载。如何编写启动代码来滚动整页呈现 javacript 并返回 html呢?
jackcode
2023/05/24
1K0
如何采集javascript动态加载网页
如何利用 JavaScript 实现并发控制
  例如一个爬虫程序,可以通过限制其并发任务数量来降低请求频率,从而避免由于请求过于频繁被封禁问题的发生。
Nealyang
2021/01/28
1.6K0
如何利用 JavaScript 实现并发控制
在Scrapy中如何利用CSS选择器从网页中采集目标数据——详细教程(上篇)
前几天给大家分享了Xpath语法的简易使用教程,没来得及上车的小伙伴可以戳这篇文章:在Scrapy中如何利用Xpath选择器从网页中采集目标数据——详细教程(上篇)、在Scrapy中如何利用Xpath选择器从网页中采集目标数据——详细教程(下篇)。今天小编给大家介绍Scrapy中另外一种选择器,即大家经常听说的CSS选择器。
Python进阶者
2020/11/03
3K0
在Scrapy中如何利用CSS选择器从网页中采集目标数据——详细教程(上篇)
在Scrapy中如何利用CSS选择器从网页中采集目标数据——详细教程(下篇)
前几天给大家分享了Xpath语法的简易使用教程,没来得及上车的小伙伴可以戳这篇文章:在Scrapy中如何利用Xpath选择器从网页中采集目标数据——详细教程(上篇)、在Scrapy中如何利用Xpath选择器从网页中采集目标数据——详细教程(下篇)、在Scrapy中如何利用CSS选择器从网页中采集目标数据——详细教程(上篇)。之前还给大家分享了在Scrapy中如何利用CSS选择器从网页中采集目标数据——详细教程(上篇),没来得及上车的小伙伴可以戳进去看看,今天继续上篇的内容往下进行。
Python进阶者
2020/11/03
2.8K0
在Scrapy中如何利用CSS选择器从网页中采集目标数据——详细教程(下篇)
在C中,如何知道动态分配是否成功
C语言使用 malloc函数动态在堆上分配内存。malloc根据字节数的参数。如果无法分配内存,该函数将返回指向已分配内存的指针或 NULL 指针。
mariolu
2021/11/06
2.8K0

相似问题

在列表中按索引查找min/max

22

按索引jQuery查找子项

30

Python:在多维列表中按范围查找索引

329

如何在jquery中按索引查找td

310

按索引在泛型列表中查找对象

33
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档