Query
更多信息和选项
- Query 可对任意矩形和分层数据进行复杂的筛选、重组和汇总操作,通常会返回更复杂的矩形或分层数据.
- Query 可对 Dataset 对象进行操作,也可对由列表和关联组成的任意嵌套表达式进行操作.
- Query 可被视为 Part 的推广,在遍历表达式或数据集的过程中进行计算.
- operatori 可以是以下形式:
-
All,i,i;;j,"key",Key[…] 分部运算符 Select[…],MaximalBy[…],… 筛选运算符 Counts,Total,Mean,Max,… 汇总运算符 Query[…],{op1,op2,…},… 子查询运算符 Function[…],f 任意函数 - 在 Query[operator1,…][expr] 中,operatori 对 expr 依次逐步进行更深一层的查询,其任一操作可以是更“深入”到 expr 中,也可以是向外“退出”. 一般情况下,分部运算符和筛选运算符为“深入”运算符,汇总运算符、子查询运算符和任意函数为“退出”运算符. Query[][expr] 返回 expr.
- 在后面的运算符应用到更深一层之前,“深入”运算符被应用到原始数据集相应的部分. 深入运算符的特点是在作用于某一层时,它们不会改变数据更深层次的结构. 这确保后面的运算符操作时,子表达式的结构和原始数据集的相应层次是一样的. 最简单的深入运算符是 All,它选取某个给定层的所有部分,因此不会改变该层数据的结构.
- 在所有随后的运算符完成对深层数据的操作后,“退出”运算符被应用. 深入运算符对应于原始数据的层,而退出运算符对应于结果的层. 和深入运算符不同,退出运算符不必保持所操作数据的结构. 如果一个运算符没有被明确指定为深入运算符,假定其为退出运算符.
- 在后面的运算符应用到更深一层之前,“深入”分部运算符指定某层中要选取哪些元素:
-
All 随后的运算符作用于列表或关联的每个部分 i;;j 选取 i 到 j 的部分元素,将随后的运算符作用于每个部分 i 只选取部分元素 i,将随后的运算符作用于这些部分 "key",Key[key] 取出关联 key 的值,将随后的运算符作用于这些值 Keys 取出关联的键,将随后的运算符作用于每个键 Values 取出关联的值,将随后的运算符作用于每个值 {part1,part2,…} 取出指定部分,将随后的运算符作用于每个部分 - 在后面的运算符应用到更深一层之前,“深入”筛选运算符规定怎样重组或筛选某层中的元素:
-
Select[test] 只选取列表或关联中满足 test 的部分 SelectFirst[test] 选取满足 test 的第一部分元素 KeySelect[test] 选取关联中键满足 test 的部分 MaximalBy[crit],MinimalBy[crit] 选取使条件 crit 最小化或最大化的部分 SortBy[crit] 使各部分按 crit 排序 KeySortBy[crit] 给关联排序,使关联的键按 crit 排序 DeleteDuplicatesBy[crit] 按 crit 选取具有唯一性的部分元素 DeleteMissing 去掉头为 Missing 的元素 - “退出”运算符合并或汇总后面的运算符应用到更深一层产生的结果:
-
Total 结果中所有数值的总和 Min,Max 给出结果中的最小和最大值 Mean,Median,Quantile,… 给出结果的统计摘要信息 Histogram,ListPlot,… 计算结果的绘图信息 Merge[f] 用函数 f 将结果中有共同键的关联归并在一起 Catenate 将列表或关联中的元素串接在一起 Counts 给出计算结果中数值出现的次数的关联 CountsBy[crit] 给出根据 crit 计算结果中数值出现的次数的关联 CountDistinct 给出结果中不同值的个数 CountDistinctBy[crit] 给出根据 crit 结果中不同值的个数 - 在后面的运算符应用到更深一层之后,“退出”子查询运算符进行子查询操作:
-
Query[…] 对结果进行子查询 {op1,op2,…} 对结果一次运用多个运算符,产生一个列表 op1/* op2/* … 在同一层运用 op1,然后运用 op2,依次类推 <key1op1,key2op2,… > 对结果一次运用多个运算符,用给定键产生关联 {key1op1,key2op2,…} 对结果中指定元素运用不同的运算符 - 当一个或多个深入运算符和一个或多个退出运算符(例如:desc/*asc)组合在一起时,先运用深入运算符,接着其后跟随的运算符作用到更深层次的数据上,最后退出运算符将对结果进行操作.
- 特殊深入运算符 GroupBy[spec] 会在它出现的层中引入一个新的关联,可以将其移除或加入到现存查询中,不会影响其它运算符的行为.
- 在语法上 GroupBy["string"] 和 GroupBy[Key["string"]]等效. SortBy、CountsBy、MaximalBy、MinimalBy 和 DeleteDuplicatesBy 也可运用类似的语法.
- 可以给出下列选项:
-
FailureAction "Abort" 怎样处理操作失败的运算符 MissingBehavior Automatic 怎样处理涉及 Missing 的操作 PartBehavior Automatic 怎样解决元素缺失问题 - FailureAction 可能的值包括:
-
None 忽略所有提示信息及失败操作 "Abort" 当遇到提示信息时终止整个查询(缺省) "Drop" 丢弃发出信息的操作所产生的结果 "Encapsulate" 将发出信息的操作封装在 Failure 对象中 "Replace" 用 Missing["Failed"] 代替发出信息的操作产生的结果 - 选项 MissingBehavior 规定了数值函数和其他函数应该怎样处理头为 Missing 的表达式. 可能的值包括:
-
None 用 Missing 的一般处理方式 Automatic 调用针对 Mean、Total 等的特殊的处理规则 - 选项 PartBehavior 规定了怎样处理涉及不存在的元素的运算符. 可能的值包括:
-
None 用 Part 的一般处理方式 Automatic 调用针对无效 i;;j,缺失 i 等的特殊的处理规则
范例
打开所有单元关闭所有单元选项 (4)
FailureAction (2)
设置 FailureActionNone 对结果不采取任何特殊操作:
设置 FailureAction->"Encapsulate" 将失败的结果封装在 Failure 对象中:
设置 FailureAction->"Replace" 用占位符替换失败的结果. 对于函数 Query,该占位符是一个 Missing 对象:
设置 FailureAction->"Drop" 会将失败的结果从最终表达式中删除:
设置 FailureAction->"Abort" 中止计算,返回一个 Failure 对象:
设置 FailureAction->{"Drop",f} 可用于在删除失败结果之前执行某种操作:
设置 FailureAction->{"Replace",f} 可指定用什么对失败函数进行替换:
MissingBehavior (1)
缺省值 MissingBehavior->Automatic,在碰到 Missing 的情况时,对运算符运用特殊规则:
设置为 MissingBehavior->None,对所有运算符采用 Missing 的一般处理方式:
PartBehavior (1)
缺省值 PartBehavior->Automatic 调用运算符的特殊处理方式以避免操作失败:
设置为 PartBehavior->None,则规定要使用 Part 的一般处理方式:
文本
Wolfram Research (2014),Query,Wolfram 语言函数,https://reference.wolfram.com/language/ref/Query.html.
CMS
Wolfram 语言. 2014. "Query." Wolfram 语言与系统参考资料中心. Wolfram Research. https://reference.wolfram.com/language/ref/Query.html.
APA
Wolfram 语言. (2014). Query. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/Query.html 年