如何将字典的字典转换为 table?
How do I convert a dictionary of dictionaries into a table?
我有一本字典的字典:
`1`2!((`a`b`c!(1 2 3));(`a`b`c!(4 5 6)))
| a b c
-| -----
1| 1 2 3
2| 4 5 6
我正在研究如何将其变成 table 看起来像:
1 a 1
1 b 2
1 c 3
2 a 4
2 b 5
2 c 6
在 KDB 中实现此目标的最简单/'right' 方法是什么?
不确定这是最短还是最好的方法,但我的解决方案是:
ungroup flip`c1`c2`c3!
{(key x;value key each x;value value each x)}
`1`2!((`a`b`c!(1 2 3));(`a`b`c!(4 5 6)))
这给出了预期的 table 和列名 c1, c2, c3
您实质上想要做的是“逆向旋转”- 请在此处查看官方旋转页面:https://code.kx.com/q/kb/pivoting-tables/
不幸的是,该页面没有提供反透视功能,因为它不是微不足道的,而且很难有一个通用的解决方案,但如果你在 Kx/K4/community 档案中搜索“unpivot”,你您将找到一些反透视函数的示例,例如来自 Aaron Davies 的这个示例:
unpiv:{[t;k;p;v;f] ?[raze?[t;();0b;{x!x}k],'/:(f C){![z;();0b;x!enlist each (),y]}[p]'v xcol't{?[x;();0b;y!y,:()]}/:C:(cols t)except k;enlist(not;(.q.each;.q.all;(null;v)));0b;()]};
使用这个,你的问题(在对输入稍作调整后)变成:
q)t:([]k:`1`2)!((`a`b`c!(1 2 3));(`a`b`c!(4 5 6)));
q)`k xasc unpiv[t;1#`k;1#`p;`v;::]
k v p
-----
1 1 a
1 2 b
1 3 c
2 4 a
2 5 b
2 6 c
此解决方案可能比您的用例所需的更复杂,因为它试图解决一般的反旋转情况。
只是对此的更新,我用与所选答案不同的方式解决了这个问题。
最后,我:
- 将每一行转换为 table,其中包含一行和我需要的所有列。
- 将所有 table 加入到一起。
我有一本字典的字典:
`1`2!((`a`b`c!(1 2 3));(`a`b`c!(4 5 6)))
| a b c
-| -----
1| 1 2 3
2| 4 5 6
我正在研究如何将其变成 table 看起来像:
1 a 1
1 b 2
1 c 3
2 a 4
2 b 5
2 c 6
在 KDB 中实现此目标的最简单/'right' 方法是什么?
不确定这是最短还是最好的方法,但我的解决方案是:
ungroup flip`c1`c2`c3!
{(key x;value key each x;value value each x)}
`1`2!((`a`b`c!(1 2 3));(`a`b`c!(4 5 6)))
这给出了预期的 table 和列名 c1, c2, c3
您实质上想要做的是“逆向旋转”- 请在此处查看官方旋转页面:https://code.kx.com/q/kb/pivoting-tables/
不幸的是,该页面没有提供反透视功能,因为它不是微不足道的,而且很难有一个通用的解决方案,但如果你在 Kx/K4/community 档案中搜索“unpivot”,你您将找到一些反透视函数的示例,例如来自 Aaron Davies 的这个示例:
unpiv:{[t;k;p;v;f] ?[raze?[t;();0b;{x!x}k],'/:(f C){![z;();0b;x!enlist each (),y]}[p]'v xcol't{?[x;();0b;y!y,:()]}/:C:(cols t)except k;enlist(not;(.q.each;.q.all;(null;v)));0b;()]};
使用这个,你的问题(在对输入稍作调整后)变成:
q)t:([]k:`1`2)!((`a`b`c!(1 2 3));(`a`b`c!(4 5 6)));
q)`k xasc unpiv[t;1#`k;1#`p;`v;::]
k v p
-----
1 1 a
1 2 b
1 3 c
2 4 a
2 5 b
2 6 c
此解决方案可能比您的用例所需的更复杂,因为它试图解决一般的反旋转情况。
只是对此的更新,我用与所选答案不同的方式解决了这个问题。
最后,我:
- 将每一行转换为 table,其中包含一行和我需要的所有列。
- 将所有 table 加入到一起。