(q / kdb +) Объединить элементы в списке - PullRequest
0 голосов
/ 16 января 2019

У меня есть список предметов, и мне нужно объединить их в один столбец

используя список

list:(1 2;3 4 5 7;0 1 3)

index   value
0       1 2
1       3 4 5 7
2       0 1 3

моя цель

select from list2

value
1
2
3
4
5
7
0
1
3

Ответы [ 3 ]

0 голосов
/ 16 января 2019

Функция 'raze' выравнивает 1 уровень списка.

   q) raze (1 2;3 4 5 7;0 1 3)
   q) 1 2 3 4 5 7 0 1 3

Если у вас есть список с многоуровневым индексированием, используйте наречие «over» с raze:

   q)  (raze/)(1 2 3;(11 12;33 44);5 6)

Чтобы преобразовать это в столбец таблицы:

   q) t:([]c:raze list)
0 голосов
/ 16 января 2019

ungroup также будет работать при условии, что в вашей таблице нет нескольких столбцов с разной вложенностью (или строк)

q)ungroup ([]list)
list
----
1
2
3
4
5
7
0
1
3
0 голосов
/ 16 января 2019

Если бы вы просто хотели, чтобы ваш список отображался таким образом, я бы сделал следующее.

1 cut raze list 

Я вижу, что вы использовали оператор select, однако, если вы хотите, чтобы ваш столбец был определен в таблице следующим образом, сделайте следующее

a:raze list
tab:([] b:a)

Ваш вывод из этого должен выглядеть следующим образом

q)tab
b
-
1
2
3
4
5
7
0
1
3

В целом, более краткий способ достичь того, что вы хотите сделать, был бы

select from ([]raze list)   

Во избежание каких-либо ошибок не следует называть заголовок столбца «значением», так как это защищенное ключевое слово в kdb +, и когда вы пытаетесь переназначить его как заголовок столбца, kdb будет вызывать ошибку присваивания

`assign 

Надеюсь, это поможет

...