Заменить бесконечность нулями по всей таблице KDB - PullRequest
0 голосов
/ 21 сентября 2019

// пример таблицы

таблица: ([] col1: 20 40 30 0w; col2: 4? 4; col3: 100 200 0w 300)

Мое решение

{. [Таблица; (где 0w = таблица [x]; x);:; 0n]} '[exec c из мета таблицы, где t = "f"]

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

Заранее спасибо!

1 Ответ

2 голосов
/ 21 сентября 2019

Было бы хорошо конкретизировать ваш вопрос немного подробнее.Вы всегда ожидаете, что это будут плавающие столбцы?Будет ли в таблице много столбцов?Будут ли смешаны столбцы string / sym, что может усложнить ситуацию?Если в вашей таблице небольшое количество столбцов, вы можете просто обновить

q)show t
col1 col2 col3
--------------
20   1    100
40   2    200
30   2    0w
0w   1    300

q)inftonull:{(x where x=0w):0n;x} 
q)update inftonull col1, inftonull col3 from t
col1 col2 col3
--------------
20   2    100
40   1    200
30   0
     3    300

Если вы думаете, что имена столбцов могут измениться или иметь очень большое количество столбцов, вы можете попробовать функциональное обновление (где вы можетепередать имена столбцов в качестве параметров)

q){![t;();0b;x!inftonull,/:x,:()]}`col1`col3
col1 col2 col3
--------------
20   1    100
40   2    200
30   2
     1    300

Если ваша таблица состоит только из числовых данных, что-то вроде

q)flip{(x where x=.Q.t[type x]$0w):x 0N;x}each flip t
col1 col2 col3
--------------
20   2    100
40   1    200
30   0
     3    300

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

...