本期案例是对相邻的两个不同的数进行合并,连续有多个相邻的数是相同的,则往后合并,直至使合并的非重复个数是两个为止,如果当前数与上一个数相同,则显示为空,合并后效果下:
……
源数据:
{4,5,4,2,4,5,2,1,5,4,2,4,1,4,1,4,2,5,5,2,2,2,4,4,2,4,5,1,1}
解题步骤
提取相邻的数,自然就想到了可以通过添加索引列进行转换,那该案例就转换成了以下几种情况:
1.如果相邻的上一个是相同的数,那么只要判断当前数与取得的{索引号-1}的数一致就为空值就可以,要增加一个索引号为0的判断条件。
2.如果相邻的两个是不同的数,那就直接合并就可以。
3.如果相邻有多个相同的数,要取到下一个不同的数,然后一起合并才满足要求,应该怎么处理?
就比如{ 5,5,2,2,2,4,4,2},当前数为5,然后删除当前数后进行分组,就获得了:
那就可以进行判断,如果分组后表的第一个数,通过Table.FirstValue是等于5的,那么我们提取[a]列的前两项,然后深化合并再连接5就得到了结果:
4.最终结果:
Table.RemoveColumns(Table.AddColumn(Table.AddIndexColumn(源,"Index"),"Combine",each if [Index]<>0 and 源[Value]{[Index]-1}?=[Value] then "" else [A=Table.Group(Table.FromColumns({List.Skip(源[Value],[Index]+1)}),"Column1",{"a",each _},0),B=if Table.FirstValue(A)=[Value] then Text.Combine({[Value]}&Table.Combine(List.FirstN(A[a],2))[Column1]) else Text.Combine({[Value]}&A[a]{0}[Column1])][B]),"Index")
可以尝试连续三个或者多个数相连的操作,这里不再展开。
以上是本期记录。