Power Query统计一串数字中大于3的数字之间3的个数

给定的一串数字中统计出大于3的数字之间3的个数:

Power Query统计一串数字中大于3的数字之间3的个数

我们用剔除法,先是剔除小于3的数字,只保留3以及大于3的数字,然后找出大于3的数字的位置,通过位置进行统计,我们需要在结尾添加一个位置,来补齐。

我们来看Power Query中的具体操作:

建一个参数,存储这一串数字:

Power Query统计一串数字中大于3的数字之间3的个数

然后建立一个空查询,开始我们的计算过程:

第一步是要把这串数字分成单个的列表:

=Text.ToList(a)

Power Query统计一串数字中大于3的数字之间3的个数

然后我们在这个列表的基础上,剔除小于3的数字,并区分3与大于三的数字:

Power Query统计一串数字中大于3的数字之间3的个数

我们用了一个循环判断语句:

= List.Transform(

Text.ToList(a),each if Number.From(_)<3 then null else if Number.From(_)=3 then 1 else 0)

因为Text.ToList分解出来的是文本,需要用Number.From转换成数字才能比较,然后我们用List.RemoveNulls函数去除null:

Power Query统计一串数字中大于3的数字之间3的个数

就得到了我们想要的初步结果,当然这个结果我们也可以用别的函数做出来:

List.ReplaceMatchingItems+List.RemoveItems

= List.ReplaceMatchingItems(

List.RemoveItems(Text.ToList(a),{"0".."2"}),{{"3",1},{"4",0},{"5",0},{"6",0},{"7",0},{"8",0},{"9",0}})
Power Query统计一串数字中大于3的数字之间3的个数

这两个结果都还不是最终的列表结果,我们还要补上一个0,在列表的结尾处&{0}:

Power Query统计一串数字中大于3的数字之间3的个数

我们把这个结果作为一个操作步骤保留下来,并开始下一步计算:

Power Query统计一串数字中大于3的数字之间3的个数

在高级编辑器中,把第一步的过程设为l,l就是我们第一步生成的一个列表,下面计算用引用这个列表进行计算:

let

l = List.RemoveNulls(List.Transform(Text.ToList(a),each if Number.From(_)<3 then null else if Number.From(_)=3 then 1 else 0))&{0},

lp=List.Transform({1..List.Count(l)},each if l{_-1}=0 then _ else null)

in

lp

第二步是要找出大于3,也就是l列表中的0的位置编号,通常情况下列表的编号是从零开始的,这个习惯和VBA或其他编程语言中一样是数组的默认下标。我们建立一个列表是用l列表的项目个数作为最大值的列表,从1开始,那么要正确引用l列表中的内容就要这样写:l{_-1},那么each后面的if就可以理解为,l列表中项等于0,就给出编号,否则就是null

Power Query统计一串数字中大于3的数字之间3的个数

去除null得到4个数字:

Power Query统计一串数字中大于3的数字之间3的个数

大家可以计算一下,3的个数应该是大的数字减去小的数字再减去1,第一个例外,只减1就可以了。

我们来写第三步:

Power Query统计一串数字中大于3的数字之间3的个数

ls=List.Transform(

{1..List.Count(lp)},each if _=1 then lp{_-1}-1 else lp{_-1}-lp{_-2}-1)

列表中后一个项目减去前一个项目怎么表达:lp{_-1}-lp{_-2}

这时候结果已经有了,最后一步就是把结果合并起来:

Power Query统计一串数字中大于3的数字之间3的个数

同样的道理要用Text.From函数把数字转换成文本,然后才能用Text.Combine合并:

c=Text.Combine(

List.Transform({1..List.Count(ls)},each Text.From(ls{_-1})))

所有这些过程都结束后,我们就来创建一个函数,用作统计3的个数:

Power Query统计一串数字中大于3的数字之间3的个数

通过这个例子,我们能够了解到Power Query中可以像编写程序解决问题的思路来解题,每一步的过程可以作为后续的参数,通过循环与判断,能够解决很多问题。这个例子中的列表项目引用,与我们其他编程语言中的一维数组的功能是一模一样的。

展开阅读全文

页面更新:2024-05-04

标签:个数   数字   下标   最大值   下一步   数组   函数   例子   文本   编号   位置   参数   过程   项目   列表   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top