问题
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.
How to write the following statements in one line:
q)t1:(3#3)?\:`8 q)t1[;0]:`abc
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:
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]
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