提问人:sevenmiracle 提问时间:4/25/2023 最后编辑:sevenmiracle 更新时间:4/26/2023 访问量:106
如何使用 kdb 将表中的字符串替换为 null 值
How to replace a string in a table with a null value using kdb
问:
我有 1 个表格,如下所示:
我想在 c1>2 时将 c2 设置为“”,预计结果如下:
我试着做:
t:([] c1:1 2 3 4;c2:("abcd";"efgh";"igkl";"mnop"))
c:enlist (>; `c1; 2)
b:0b;
a:(enlist `c2)!enlist "";
![t;c;b;a]
但它报告了一个错误:长度:不兼容的列表长度 请告诉我该怎么做,谢谢。
答:
4赞
Cathal O'Neill
4/25/2023
#1
由于是一个字符列表(IE是一个字符串),你需要先“”,然后取()你需要的字符串数量。在这种情况下,我使用了 .c2
enlist
#
count[i]
q)update c2:count[i]#enlist"" from t where c1>2
c1 c2
---------
1 "abcd"
2 "efgh"
3 ""
4 ""
在功能形式上:
q)parse"update c2:count[i]#enlist\"\"from t where c1>2"
!
`t
,,(>;`c1;2)
0b
(,`c2)!,(#;(#:;`i);(enlist;""))
q)![t;enlist(>;`c1;2);0b;enlist[`c2]!enlist(#;(count;`i);(enlist;""))]
c1 c2
---------
1 "abcd"
2 "efgh"
3 ""
4 ""
评论
3赞
rianoc
4/25/2023
using 会生成一个有成本的列表,因此,如果要尽可能高效,请使用现有列i
0 1 ... N-1
q)update c2:count[c2]#enlist"" ...
1赞
nikeros
4/26/2023
#2
或者,使用运算符:@
t[`c2]:@[t[`c2];where 2<t`c1;{""}]
输出
c1 c2
---------
1 "abcd"
2 "efgh"
3 ""
4 ""
这比解决方案快一点:update
q)\t:1000000 @[t[`c2];where 2<t[`c1];{""}]
1054
q)\t:1000000 update c2:count[i]#enlist"" from t where c1>2
1237
评论