kdb q 中是否有类似 printf 的函数?我正在尝试将双字段格式化为 4 位精度。等效的 printf 格式是“%.04f”。
我可以访问一个实时 KDB 服务器,该服务器具有每毫秒到达的新数据表。
目前,我只是使用一种简单的方法,它基本上是这样的:
.z.ts:{
newData: getNewData[]; / get data arriving in the last second
data::data uj newData;
};
\t 100;
Run Code Online (Sandbox Code Playgroud)
确保我的数据(名为data)不断更新。
然而,uj它非常慢(可能是由于内存的不断重新分配)并且轮询只是很尴尬。
我听说 KDB 旨在擅长处理这种流式刻度数据,那么有更好的方法吗?也许一些不需要的基于推送的方法uj?
我有一个表格,其中包含一个具有以下格式数据的列 - 让我们将列称为“标题”,将表格称为“s”
标题
ab.123
ab.321
cde.456
cde.654
fghi.789
fghi.987
Run Code Online (Sandbox Code Playgroud)
我正在尝试获取“.”之前的字符的唯一列表。所以我最终得到了这个:
ab
cde
fghi
Run Code Online (Sandbox Code Playgroud)
我尝试将初始列选择到表格中,然后尝试进行更新以使用“ss”创建一个新列,该列是点的位置。
像这样:
t: select title from s
update thedot: (title ss `.)[0] from t
Run Code Online (Sandbox Code Playgroud)
然后我打算尝试做第三列,它是“标题”中的“N”个字符,其中 N 是存储在“thedot”列中的值。
我尝试更新时得到的只是“类型”错误。
有任何想法吗?我对 kdb 很陌生,所以毫无疑问以一种非常愚蠢的方式做一些简单的事情。
如何使用字符串作为变量名?
我希望在运行时构造我的变量名,但是如何将其用作左参数并为其分配值?
例子:
[`$"test"] : 1 / 'assign error
Run Code Online (Sandbox Code Playgroud) 非常愚蠢的问题......考虑下面按 sym 排序的表 t1。
t1:([]sym:(3#`A),(2#`B),(4#`C);val:10 40 12 50 58 75 22 103 108)
sym val
A 10
A 40
A 12
B 50
B 58
C 75
C 22
C 103
C 108
Run Code Online (Sandbox Code Playgroud)
我想选择与每个符号对应的第一行,如下所示:
(`sym`val)!(`A`B`C;10j, 50j, 75j)
sym val
A 10
B 50
C 75
Run Code Online (Sandbox Code Playgroud)
必须有一个单线来做到这一点。要获取每个符号的最后一行,就像select by sym from t1. 任何提示?
考虑下表:
sym A B
X 1 2
Y 4 1
X 6 9
Z 6 3
Z 3 7
Y 1 8
Run Code Online (Sandbox Code Playgroud)
我想为我的每个符号 X、Y 和 Z 找到最小 A 值和最大 B 值,并将它们显示在新表中,即
sym minA maxB
X 1 9
Y 1 8
Z 3 7
Run Code Online (Sandbox Code Playgroud)
谢谢。
假设我有一张桌子
tbl:flip `id`evt!(1 1 1 2 2 2 2 2 3 3; `a`b`c`a`b`b`b`c`a`c)
Run Code Online (Sandbox Code Playgroud)
如何有效地计算evt的出现次数,但每个id只能计算一次
因此,结果应该如下(或将evt映射到唯一计数的任何其他格式)
res:flip `evt`ct !(`a`b`c; 3 2 3)
Run Code Online (Sandbox Code Playgroud) 我将如何遍历KDB Q中的列表并替换不符合某些子字符串条件的元素?
逻辑示例伪代码:
list.stream()
.forEach(x -> {
if (x matches substring) :
newList.add(x)
else :
newList.add("")
})
Run Code Online (Sandbox Code Playgroud)
当前列表:
S: ("Lint"; "Stack"; "Linode"; "Overflow";"Linux")
Run Code Online (Sandbox Code Playgroud)
要匹配的子字符串在"Li"这里。这样,字符串“ Stack”和“ Overflow”被空字符串替换,因为它们不包含子字符串。
结果列表:
S: ("Lint"; ""; "Linode"; "";"Linux")
Run Code Online (Sandbox Code Playgroud) 我有一张桌子:
q)t:([] a:1 2 3; b:```; c:`a`b`c)
a b c
-----
1 a
2 b
3 c
Run Code Online (Sandbox Code Playgroud)
从此表中,我只想选择不具有空值的列,在这种情况下,输出中应该省略列b(类似于pandas中的dropna方法)。
expected output
a c
---
1 a
2 b
3 c
Run Code Online (Sandbox Code Playgroud)
我尝试了很多类似的事情
select from t where not null cols
Run Code Online (Sandbox Code Playgroud)
但没有用。
如何根据字典中的值过滤字典中的项目。例如,给定以下字典:
990.5| 0
900.5| 0
600.5| 300
600 | -300
Run Code Online (Sandbox Code Playgroud)
如何过滤掉其中值 = 0 的所有实例。此后的结果是:
600.5| 300
600 | -300
Run Code Online (Sandbox Code Playgroud)
谢谢