【问题标题】:split keyvalue pair data into new columns将键值对数据拆分为新列
【发布时间】:2021-09-23 01:12:26
【问题描述】:

我的桌子看起来像这样:

id   |   data
 1   |   A=1000 B=2000
 2   |   A=200 C=300

在 kdb 中有没有办法对数据进行规范化,最终表格如下:

id   | data.1 | data.2
 1   |      A |   1000
 1   |      B |   2000
 2   |      A |    200
 2   |      C |    300

【问题讨论】:

    标签: kdb


    【解决方案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]
    

    【讨论】:

      【解决方案2】:

      您可以使用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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-05
        • 2022-01-09
        • 1970-01-01
        • 2022-01-23
        • 2013-08-29
        • 1970-01-01
        • 1970-01-01
        • 2022-06-15
        相关资源
        最近更新 更多