【问题标题】:Function updating multiple columns in kdb函数更新 kdb 中的多个列
【发布时间】:2020-12-12 22:15:13
【问题描述】:

我有一张表要更新:

q)show table:([]letter:`a`b`c`a;fruit:`apple`banana`pear`strawberry;family:`mom`dad`brother`sister)
letter fruit      family
-------------------------
a      apple      mom
b      banana     dad
c      pear       brother
a      strawberry sister

我想用它们各自列的名称替换所有条目。

这似乎有效:

q){![table;();0b;(enlist x)!(enlist `x)]}`letter
letter fruit      family
-------------------------
letter apple      mom
letter banana     dad
letter pear       brother
letter strawberry sister

...但不是这个:

q){![table;();0b;(enlist x)!(enlist `x)]}`letter`fruit
'type
  [1]  {![table;();0b;(enlist x)!(enlist `x)]}
        ^
q))

目的是创建一个为分类变量创建虚拟变量的函数,所以我需要一个通用函数。有什么建议吗?

【问题讨论】:

    标签: kdb


    【解决方案1】:

    这可以通过@ apply 来实现,而不是像这样的功能更新:

    q){@[`table;x;:;x]}`letter`fruit
    `table
    q)table
    letter fruit family
    --------------------
    letter fruit mom
    letter fruit dad
    letter fruit brother
    letter fruit sister
    

    编辑 - 对于所有列:

    {@[`table;x;:;x]} each cols table
    

    {@[x;y;:;y]}/[table;cols table]
    
    q)table
    letter fruit family
    -------------------
    letter fruit family
    letter fruit family
    letter fruit family
    letter fruit family
    

    【讨论】:

    • 我需要一个概括,可用于任何表,而无需插入特定的列名。有没有办法使这项工作? {@[`table;x;:;x]}cols 表
    【解决方案2】:

    您原来的功能更新可以这样工作:

    q){![table;();0b;x!enlist'[x:(),x]]}cols table
    letter fruit family
    -------------------
    letter fruit family
    letter fruit family
    letter fruit family
    letter fruit family
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-26
      • 1970-01-01
      相关资源
      最近更新 更多