(已解决) 关于 P.groupc() 第一参数的问题

大佬们,早上好!😄 😄

关于 P.groupc() 行转列时前两个参数发现有如下问题,恳请大佬们得闲时帮忙看看🙏 🙏

使用场景描述如下,需要把左表转换成右表,关系这一列中描述的户主都在每一户的第一行:

imagepng

这个问题不难,方法也并不只有 groupc 这一种,只是相对来说使用 groupc 会更简洁直观,首先想到的就是用 groupc 来实现。以往的使用场景表格都很规整,要处理的那一列都是局部连续一样的,而这个场景更像是 group@i 这种相邻之间的判断,我不是说要加选项变成 groupc@i。我尝试写了一下:

首先,用 A.groupc() 时没有问题,结果符合预期:

=spl("=i=0,?.groupc([i+=if(~3==$[户主],1)];~.m(:2))",B3:D11)

imagepng

可以看到,此时 A.groupc()的第一参数可以是表达式,灵活好用。但对于强迫症患者来说,表头需要另外书写,不能一起生成,略有美中不足,此时用 A.groupc() 算不得最佳实践。当然函数没有错,是方法选错了。

于是,想着用 P.groupc() 试试,结果报错了,如下所示:

=spl("=i=0,E(?).groupc(i+=if(关系==$[户主],1):序号;姓名,身份证;)",B.:.D)

imagepng

此时第一参数似乎不能用表达式,识别不了列名。根据函数说明,一参可以是字段或者表达式,二参可以指定某几列,二参省略时默认为除了第一参数以外的其他字段。上图中如果把二参中的列名写全,可以出结果,说明 1 参支持表达式:

imagepng

如果把 2 参省略,能跑但结果有问题:

imagepng

另外,一参中的列名好像不能用 #n 的形式代替,比如:

imagepng

在 2 参中写成 #n 的形式没有问题,但是在 1 参是表达式时,2 参也要写全,不能省略或者指定其中某几列:

imagepng

再一个,1 参写成列名跟写成 #n 结果不同,比如 1 参不用表达式时,

写成列名时的结果如下,这个结果符合预期:

imagepng

写成 #n 的形式时结果跟预期不符:

imagepng

猜测主要是 P.groupc() 中第一参数的问题:

1、第一参数用表达式时,第二参数存在某种冲突;

2、第一参数不支持 #n 的形式,而第二参数支持字段名也支持#n 的形式。

测试数据如下,可复制使用:

A B C
1 姓名 身份证 关系
2 李大 101 户主
3 李二 102
4 陈大 201 户主
5 陈一 202
6 陈二 203
7 邱大 301 户主
8 王大 401 户主
9 王一 402
10 王二 403

以上问题恳请大佬们得闲时给予帮助!

因为这种使用场景平时碰到的还是蛮多的,SPL 洞察到位,自从创造了 P.groupc()这个函数,我就不想用其他手法解决此类问题了,这种问题的最佳实践 (Best Practice) 就是用 P/A.groupc。

谢谢🙏