行列的上层分类互转
举例
例1:列转行
有 Excel 文件 csv.csv,数据如下所示:
C1 |
C2 |
C3 |
||||||
Meat |
oil |
Vegetable |
Meat |
Vegetable |
oil |
Meat |
oil |
Vegetable |
8 |
6 |
4 |
18 |
62 |
24 |
11 |
12 |
13 |
csv 文件里 N 条横向摆放的数据,第1行是每个数据的国家字段的值,第2行是每个数据的其他列名,第3行是每列对应的数值。现在要将该文件整理成规范的行式数据,结果如下:
country |
Meat |
Vegetable |
oil |
C1 |
8 |
4 |
6 |
C2 |
18 |
62 |
24 |
C3 |
11 |
13 |
12 |
编写 SPL 脚本:
A |
|
1 |
=file("csv.csv").read() |
2 |
=A1.split@n(",") |
3 |
=transpose(A2).run(if(~(1)=="",~(1)=~[-1](1))) |
4 |
=create(country,cate,value) |
5 |
>A3.(A4.record(~)) |
6 |
=A4.pivot(country;cate,value) |
7 |
=file("result.csv").export@ct(A6) |
A1 把 csv 的数据读成串
A2 把串拆成序列的序列
A3 转置序列的序列,把第一列国家补完整
A4 建空序表 (country,cate,value)
A5 将 A3 的数据依次填入序表
A6 用 pivot 函数行转列
A7 结果导出到 result.csv
例2:行转列
有 Excel 文件 csv.csv,数据如下所示:
country |
Meat |
Vegetable |
oil |
C1 |
8 |
4 |
6 |
C2 |
18 |
62 |
24 |
C3 |
11 |
13 |
12 |
首行是列名,分别是国家和其他信息列。现在要将该文件整理成如下形式:
C1 |
C2 |
C3 |
||||||
Meat |
Vegetable |
oil |
Meat |
Vegetable |
oil |
Meat |
Vegetable |
oil |
8 |
4 |
6 |
18 |
62 |
24 |
11 |
13 |
12 |
编写 SPL 脚本:
A |
|
1 |
=file("csv.csv").import@ct() |
2 |
=A1.pivot@r(country;cate,value;Meat,Vegetable,oil) |
3 |
=A2.group(country).(~.run(country=if(#==1,country,""))).conj() |
4 |
=transpose(A3.(#1|#2|#3)).concat@nc() |
5 |
=file("result.csv").write(A4) |
A1 读取 csv 数据
A2 列转行操作,将列名Meat,Vegetable,oil作为 cate 的值,原Meat,Vegetable,oil列对应的数值作为 value 列的数据
A3 按国家分组,每组非首行国家数值为空,合并
A4 合并各列,变为序列的序列,对序列的序列转置后按逗号、回车符转成串
A5 A4的结果串写入 result.csv