Как я могу удалить столбец по индексу из таблицы kdb? - PullRequest
0 голосов
/ 25 сентября 2018

Например, как бы вы удалили первый столбец из следующей таблицы:

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, но я быхотел бы иметь возможность удалять, не зная заранее точное имя столбца.

Ответы [ 4 ]

0 голосов
/ 25 сентября 2018

Вы можете использовать

{(_/[cols x;desc y])#x}[t;0 2]

Это берет столбцы вашей таблицы, отбирает индексы, которые вы хотите отбросить, и использует отбрасывание для отбрасывания этих столбцов.Если вы хотите удалить только один индекс, вам нужно подключиться, например, так:

{(_/[cols x;desc y])#x}[t;enlist 0] 
0 голосов
/ 25 сентября 2018

Если в вашей таблице нет ключей, вы можете просто удалить из словаря:

 q) f:{[t;ind] enlist[cols[t] ind]_t}
 q) f[t;0] 
 b   c 
 ------
 ABC 10
 XYZ 20
 BAC 30
0 голосов
/ 25 сентября 2018

Использование flip и drop:

q)flip 1_flip 0!t
b   c
------
ABC 10
XYZ 20
BAC 30
0 голосов
/ 25 сентября 2018

Вы можете использовать функциональное удаление:

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
...