在没有指定列名的情况下用多个列的先前值填充空值

问题描述

我有一个包含30多个列的表,每个列都有相当多的记录空值。 为了用前面的值填充空值,我使用fills函数,并在update语句中指定每个列名称,如下所示。 (下面的示例仅以4列为目的进行解释)

      Trade:([]date:raze 3#enlist .z.d+til 10; ccy:30#`EUR`JPY`AUD; fx:30?(1.0 0.2 0.4 0n); mult:30?(10.1 0n 30.3 0n));
      update fills fx,fills mult by ccy from Trade;

当涉及更多列时,以相同的方式指定每个列名称变得很麻烦(填充col1,填充col2,填充col3 ...)。我们难道没有一种方法可以更轻松地为表的所有列填充空值吗?

非常感谢您的提前帮助!

解决方法

您可以尝试此功能更新

![trade;();(enlist`ccy)!enlist`ccy;{x!fills,'x}cols trade]

这将向前填充trade中的所有列。为了更具体地说明您要转发的列,可以将这些列另存为变量,并像这样使用它们

q)cls:`fx`mult
q)![trade;();(enlist`ccy)!enlist`ccy;{x!fills,'x}cls]
date       ccy fx  mult
-----------------------
2020.10.25 EUR 1   10.1
2020.10.26 JPY 1   10.1
2020.10.27 AUD 0.2 30.3
2020.10.28 EUR 0.4 10.1
2020.10.29 JPY 0.2 30.3
..
,

您实际上可以在整个表格上使用fills,例如

q)fills trade
date       ccy fx  mult
-----------------------
2020.10.26 EUR 1   10.1
2020.10.27 JPY 1   10.1
2020.10.28 AUD 0.2 30.3
2020.10.29 EUR 0.4 30.3
2020.10.30 JPY 0.2 30.3
2020.10.31 AUD 0.4 30.3
2020.11.01 EUR 0.4 30.3
..
q)sum each null each flip fills trade /check there are no nulls
date| 0
ccy | 0
fx  | 0
mult| 0

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...