行列转换
例题描述和简单分析
有Excel文件Book1.xlsx,数据如下所示:
A | B | C | D | |
1 | Name | Fruit1 | Fruit2 | Fruit3 |
2 | Alice | apple | banana | orange |
3 | Bob | apple | pear | plum |
4 | Cate | banana | pear | plum |
需要行列转换,结果如下:
A | B | C | |
1 | Fruit | Name1 | Name2 |
2 | apple | Alice | Bob |
3 | banana | Alice | Cate |
4 | orange | Alice | |
5 | pear | Bob | Cate |
6 | plum | Bob | Cate |
解法及简要说明
在集算器中编写脚本p1.dfx,如下所示:
A | |
1 | =file("Book1.xlsx").xlsimport@t() |
2 | =A1.pivot@r(Name;Fruit,Cate) |
3 | =A2.group(Cate).run(~=~.Cate|~.(Name)) |
4 | ="Fruit"|A3.max(~.len()-1).("Name"/~) |
5 | =file("result.xlsx").xlsexport@w([A4]|A3) |
简要说明:
A1 Excel读成序表
A2 列转行
A3 A2按Cate分组,每组计算出Cate值并Name列的结果
A4 根据最大Name值,拼出结果表头
A5 结果表头并结果数据,导出至result.xlsx
英文版
英文版