如何在 KDB 中用 NaN 替换列中的前 10 个条目

How do I replace the first 10 entries in a column with NaN in KDB

我正在使用求和对列进行计算。我想手动将 calc 列中的前 n 个条目从 float 更改为 NaN。有人可以告诉我该怎么做吗?

例如,如果我在 table t 中的列现在是 mycol:(1 2 3 4 5 6 7 8 9),我试图获得一个可以替换前 n=4 个条目的函数使用 NaN,所以我在 table t 中的专栏变为 mycol:(0N 0N 0N 0N 5 6 7 8 9)

非常感谢!

艾米丽

我们可以使用修改功能将前 n 项替换为空值。此外,最好根据类型为每一列使用适当的空文字。像这样的东西会起作用:

f: {nullDict: "ijfs"!(0Ni;0Nj;0Nf:`); @[x; til y; :; nullDict .Q.ty x]}

这将修改列表 x 中的前 y 个项目。 .Q.ty会得到输入的类型,这样我们就可以从字典中得到对应的值

然后您可以将其用于单个列,如下所示:

update mycol: f[mycol;4] from tbl

您也可以一次性完成此操作,以使用函数形式替换具有不同数量项目的多列:

![tbl;();0b;`mycol`mycol2!((f[;4];`mycol);(f[;3];`mycol2))]

请注意,您需要将 nullDict 修改为您需要的任何其他类型。

更新:感谢 Jonathon McMurray 建议使用以下代码为所有基本类型构建 nullDict 的更好方法:

{x!first each x$\:()}.Q.t except " "