KDB+ / Q Syntax optimizations to oneliners

依然范特西╮ 提交于 2020-01-17 01:17:12

问题


I am definitly a q-mortal. I would even say a q-baby. Well I have some question how to put together my code from separate lines to a one-liner. I guess there is a way more elegant solution than mine.

  1. How to write the following statements in one line:

    q)t1:(3#3)?\:`8
    q)t1[;0]:`abc
    
  2. In this table creation, how can I add another column which I have as list (like with the command ([]id:id_list;data:data_list;.....)). Till now I am creating another table and doing an inner join on them. I guess that's not very efficient:

    `id xkey update id:i from flip (`row1`row2!(1 2;3 4))
    

回答1:


For the 1st one you may do:

q)`abc,/:(3#2)?\:`8
abc jognjhck cihanjhp
abc hkpblald aeajbddp
abc blmjhgah ooeiogdj

For 2nd one you may treat the table as a dictionary:

q)tb
row1 row2
---------
1    3   
2    4   
q)(tb`id): 5 6
q)tb
row1 row2 id
------------
1    3    5 
2    4    6 



回答2:


  1. Two options:-
    Create a 3*2 matrix of random symbols and append `abc in front.

    q)`abc,/:(3#2)?\:`8
    

Or create 3*3 matrix of random symbols and use functional form of amend to update the first column. This is a more generic approach.

    q).[(3#3)?\:`8;(::;0);:;`abc]
  1. I don't see any problem with using just update statement.

    q)c:1 2  
    q)t  
    row1 row2  
    ---------  
    1    3  
    2    4  
    q)update newCol:c from `t  
    `t  
    q)t  
    row1 row2 newCol  
    ----------------  
    1    3    1  
    2    4    2
    


来源:https://stackoverflow.com/questions/30559343/kdb-q-syntax-optimizations-to-oneliners

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!