将键值对数据拆分为新列
split keyvalue pair data into new columns
我的 table 看起来像这样:
id | data
1 | A=1000 B=2000
2 | A=200 C=300
在kdb中有没有办法对数据进行归一化,使得最终的table如下:
id | data.1 | data.2
1 | A | 1000
1 | B | 2000
2 | A | 200
2 | C | 300
您可以使用 vs
(来自标量的向量)的组合,每个 '
和 ungroup
:
q)t:([]id:1 2;data:("A=1000 B=2000";"A=200 C=300"))
q)t
id data
------------------
1 "A=1000 B=2000"
2 "A=200 C=300"
q)select id, dataA:`$data[;0], dataB:"J"$data[;1] from
ungroup update data: "=" vs '' " " vs ' data from t
id dataA dataB
--------------
1 A 1000
1 B 2000
2 A 200
2 C 300
我不建议使用 .
命名列,例如data.1
一种选择是利用 0:
及其键值解析功能,记录在此处 https://code.kx.com/q/ref/file-text/#key-value-pairs 例如
q)ungroup delete data from {x,`data1`data2!"S= "0:x`data}'[t]
id data1 data2
---------------
1 A "1000"
1 B "2000"
2 A "200"
2 C "300"
假设您希望 data2
是长数据类型 (j
),可以做到
update "J"$data2 from ungroup delete data from {x,`data1`data2!"S= "0:x`data}'[t]
我的 table 看起来像这样:
id | data
1 | A=1000 B=2000
2 | A=200 C=300
在kdb中有没有办法对数据进行归一化,使得最终的table如下:
id | data.1 | data.2
1 | A | 1000
1 | B | 2000
2 | A | 200
2 | C | 300
您可以使用 vs
(来自标量的向量)的组合,每个 '
和 ungroup
:
q)t:([]id:1 2;data:("A=1000 B=2000";"A=200 C=300"))
q)t
id data
------------------
1 "A=1000 B=2000"
2 "A=200 C=300"
q)select id, dataA:`$data[;0], dataB:"J"$data[;1] from
ungroup update data: "=" vs '' " " vs ' data from t
id dataA dataB
--------------
1 A 1000
1 B 2000
2 A 200
2 C 300
我不建议使用 .
命名列,例如data.1
一种选择是利用 0:
及其键值解析功能,记录在此处 https://code.kx.com/q/ref/file-text/#key-value-pairs 例如
q)ungroup delete data from {x,`data1`data2!"S= "0:x`data}'[t]
id data1 data2
---------------
1 A "1000"
1 B "2000"
2 A "200"
2 C "300"
假设您希望 data2
是长数据类型 (j
),可以做到
update "J"$data2 from ungroup delete data from {x,`data1`data2!"S= "0:x`data}'[t]