kdb 卷起。从映射到大于 x 的最小值的 table 获取值
kdb voolkup. get value from table that is mapped to smallest val larger than x
假设我有一个字典
d:flip(100 200 400 800 1600; 1 3 4 6 10)
如何创建一个 returns 大于 x 的最小键的值的查找函数?给定一个 table
tbl:flip `sym`val!(`a`b`c`d; 50 280 1200 1800)
我想做类似
的事情
{[x] : update new:fun[x[`val]] from x} each tbl
最终达到这样的 table
tbl:flip `sym`val`new!(`a`b`c`d; 50 280 1200 1800; 1 4 10 0N)
sym val new
a 50 1
b 280 4
c 1200 10
d 1800
我想你会想用binr
到return下一个大于或等于x
的元素。请注意,您应该使用排序列表才能正常工作。对于上面的示例,将 d
转换为带有 d:(!). flip d
的字典我想出了:
q)k:asc key d
q)d k k binr tbl`val
1 4 10 0N
q)update new:d k k binr val from tbl
sym val new
------------
a 50 1
b 280 4
c 1200 10
d 1800
从哪里获取要使用的字典键:k k binr tbl`val
。
编辑:如果 table 中的值需要映射到大于 x
但不等于的值,您可以尝试:
q)show tbl:update val:100 from tbl where i=0
sym val
--------
a 100
b 280
c 1200
d 1800
q)update new:d k (k-1) binr val from tbl
sym val new
------------
a 100 3
b 280 4
c 1200 10
d 1800
阶梯式词典可能会有所帮助
http://code.kx.com/q/cookbook/temporal-data/#stepped-attribute
q)d:`s#-0W 100 200 400 800 1600!1 3 4 6 10 0N
q)d 50 280 1200 1800
1 4 10 0N
假设我有一个字典
d:flip(100 200 400 800 1600; 1 3 4 6 10)
如何创建一个 returns 大于 x 的最小键的值的查找函数?给定一个 table
tbl:flip `sym`val!(`a`b`c`d; 50 280 1200 1800)
我想做类似
的事情{[x] : update new:fun[x[`val]] from x} each tbl
最终达到这样的 table
tbl:flip `sym`val`new!(`a`b`c`d; 50 280 1200 1800; 1 4 10 0N)
sym val new
a 50 1
b 280 4
c 1200 10
d 1800
我想你会想用binr
到return下一个大于或等于x
的元素。请注意,您应该使用排序列表才能正常工作。对于上面的示例,将 d
转换为带有 d:(!). flip d
的字典我想出了:
q)k:asc key d
q)d k k binr tbl`val
1 4 10 0N
q)update new:d k k binr val from tbl
sym val new
------------
a 50 1
b 280 4
c 1200 10
d 1800
从哪里获取要使用的字典键:k k binr tbl`val
。
编辑:如果 table 中的值需要映射到大于 x
但不等于的值,您可以尝试:
q)show tbl:update val:100 from tbl where i=0
sym val
--------
a 100
b 280
c 1200
d 1800
q)update new:d k (k-1) binr val from tbl
sym val new
------------
a 100 3
b 280 4
c 1200 10
d 1800
阶梯式词典可能会有所帮助 http://code.kx.com/q/cookbook/temporal-data/#stepped-attribute
q)d:`s#-0W 100 200 400 800 1600!1 3 4 6 10 0N
q)d 50 280 1200 1800
1 4 10 0N