如何在 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 " "
我正在使用求和对列进行计算。我想手动将 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 " "