如何从 kdb table 中按索引删除列?
How can I delete a column by index from a kdb table?
例如,您将如何删除以下 table 中的第一列:
q)t: ([] a: (2018.09.25; 2018.09.25; 2018.09.25); b: `ABC`XYZ`BAC ; c: (10 20 30))
q)t
a b c
-----------------
2018.09.25 ABC 10
2018.09.25 XYZ 20
2018.09.25 BAC 30
预期结果:
b c
---------
ABC 10
XYZ 20
BAC 30
可以使用 delete a from t
,但我希望能够在事先不知道确切的列名的情况下进行删除。
您可以使用功能删除:
q){[t;index]![t;();0b;enlist cols[t]index]}[t;0]
b c
------
ABC 10
XYZ 20
BAC 30
https://code.kx.com/q/ref/funsql/#delete
使用解析来查看函数形式的 q-sql 语句:
q)parse"delete a from t"
!
`t
()
0b
,,`a
如果您的 table 没有键入,那么您可以从字典中进行简单的删除:
q) f:{[t;ind] enlist[cols[t] ind]_t}
q) f[t;0]
b c
------
ABC 10
XYZ 20
BAC 30
使用 flip
和 drop
:
q)flip 1_flip 0!t
b c
------
ABC 10
XYZ 20
BAC 30
你可以使用
{(_/[cols x;desc y])#x}[t;0 2]
这会获取您的 table 的列,获取您要删除的索引并使用删除扫描来删除这些列。如果您只想删除一个索引,则必须征募,如下所示:
{(_/[cols x;desc y])#x}[t;enlist 0]
例如,您将如何删除以下 table 中的第一列:
q)t: ([] a: (2018.09.25; 2018.09.25; 2018.09.25); b: `ABC`XYZ`BAC ; c: (10 20 30))
q)t
a b c
-----------------
2018.09.25 ABC 10
2018.09.25 XYZ 20
2018.09.25 BAC 30
预期结果:
b c
---------
ABC 10
XYZ 20
BAC 30
可以使用 delete a from t
,但我希望能够在事先不知道确切的列名的情况下进行删除。
您可以使用功能删除:
q){[t;index]![t;();0b;enlist cols[t]index]}[t;0]
b c
------
ABC 10
XYZ 20
BAC 30
https://code.kx.com/q/ref/funsql/#delete
使用解析来查看函数形式的 q-sql 语句:
q)parse"delete a from t"
!
`t
()
0b
,,`a
如果您的 table 没有键入,那么您可以从字典中进行简单的删除:
q) f:{[t;ind] enlist[cols[t] ind]_t}
q) f[t;0]
b c
------
ABC 10
XYZ 20
BAC 30
使用 flip
和 drop
:
q)flip 1_flip 0!t
b c
------
ABC 10
XYZ 20
BAC 30
你可以使用
{(_/[cols x;desc y])#x}[t;0 2]
这会获取您的 table 的列,获取您要删除的索引并使用删除扫描来删除这些列。如果您只想删除一个索引,则必须征募,如下所示:
{(_/[cols x;desc y])#x}[t;enlist 0]