Добавить столбцы в пустую таблицу - Q/KDB+

Я извлекаю данные из источника, который возвращает тиковые данные для акций (промежуток времени + плавающие цены).

Мне нужно построить 1 таблицу, в которой есть данные о тиках для каждой акции, вставляя новые значения индекса временного промежутка для каждой из них. Пример:

AAPL:
t0    101.20
t3    102.10

GOOG:
t1    850.50
t2    860.10

Table:
    AAPL    GOOG
t0  101.20  NA
t1  NA      850.50
t2  NA      860.10
t3  102.10  NA

Там будет много символов, поэтому я не могу просто вручную набрать AAPL, GOOG и т. д.


person Fomalhaut -C    schedule 05.02.2018    source источник


Ответы (1)


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

t                             sym  price
-------------------------------------------
2018.02.05D14:11:09.241245000 AAPL 101.7808
2018.02.05D14:11:09.241246000 GOOG 103.0177
2018.02.05D14:11:09.241246000 AAPL 107.8503
2018.02.05D14:11:09.241247000 GOOG 105.3471
person Thomas Smyth    schedule 05.02.2018
comment
Я специально избегал задавать этот вопрос, потому что мой следующий шаг — построить индекс по всем акциям. Как я могу вставить столбец в таблицу, подобную той, которую вы описали, которая имеет значения индекса только после того, как все акции имеют заданное значение тика? В приведенном выше примере индекс начнется с T1 (после того, как и AAPL, и GOOG проведут зарегистрированную сделку). - person Fomalhaut -C; 05.02.2018
comment
Вы можете использовать что-то вроде этого: update index:1b from trades where i>=max(first;i)fby sym. Это должно идентифицировать допустимые строки. - person Thomas Smyth; 05.02.2018
comment
Еще одно, учитывая другое решение: вместо 1b я хочу, чтобы значение индекса основывалось на последней цене каждой акции. По сути, суммируйте последнее значение каждого тикера после завершения индекса (1b сверху). Есть идеи как? - person Fomalhaut -C; 05.02.2018
comment
Вот один пример: delete ind from update index:sum@'ind from (update ind:{x[y]:z;:x}\[()!();sym;price] from trades) where i>=max(first;i)fby sym. При этом используется сканирование для создания словаря последней цены для каждого символа, а затем используется обновление для суммирования этого только после того, как все тикеры отмечены, а затем удаляется промежуточный столбец ind. - person Jonathon McMurray; 05.02.2018
comment
Спасибо за помощь ребята. Я публикую другую тему в ближайшее время, так как это в стороне от темы. - person Fomalhaut -C; 05.02.2018