KDB-在单个列中处理多种数据类型

问题描述

我有一个数据集,其中包含一列要作为符号导入的字符串值。不幸的是,值列是日期,整数或浮点数,具体取决于在列value_type中标识的数据类型。

我手动创建了value_type字段,以便“标记value的数据类型,因此我可以根据需要修改添加更多数据。

我的目标是将所有这些转换为整数个月,以便可以从iStart生成时间序列数据。 i.e (iEnd: iStart + 0+ til desired_months)我将desired_months作为我想根据列value中的各种数据生成的列

有条件的开关在这里似乎合适,但我无法使其正常运行。日期解析似乎是最有问题的。我一直认为类似于is number=1bis date=1b的东西会有所帮助。

感谢您的任何输入。

show t;

Symbol  Symbol       Symbol        Symbol            Integer   
id      iStart        value    value_type       desired_months
---|--------------------------------- 
AAA|    2014.08   02/01/2015     date                      6           
BBB|    2014.08   1              month                     1           
CCC|    2014.08   2              year                     24 
DDD|    2014.08   3              months                    3 
EEE|    2014.08   4.5            years                    54 
FFF|    2014.08   2016.01.02     date                     17 
GGG|    2014.08   10/1/2014      date                      2 
HHH|    2014.08   24             months                   24 
III|    2014.08   07/2015        date_part                11 
JJJ|    2014.08   2/16           date_part                18 

解决方法

解决此问题的一种方法可能是创建一个函数字典,该函数根据value的内容来转换val_type。见下文

q)dict:`date`month`year`date_part!({abs y-"m"$"D"$x};{[x;y]"F"$x};{[x;y]12*"F"$x};{abs y-"M"$"/"sv$[5>count x;("20";"0"),';]reverse"/"vs x})
q)dict
date     | {abs y-"m"$"D"$x}
month    | {[x;y]"F"$x}
year     | {[x;y]12*"F"$x}
date_part| {abs y-"M"$"/"sv$[5>count x;("20";"0"),';]reverse"/"vs x}

然后我们可以在更新原始表时使用此字典以返回

q)update desired_months:`int${[x;y;z;s]get each(x y),'enlist'[z],'s}[dict;val_type;string val;iStart]from t
iStart  val        val_type  desired_months
-------------------------------------------
2014.08 02/01/2015 date      6
2014.08 1          month     1
2014.08 2          year      24
2014.08 3          month     3
2014.08 4.5        year      54
2014.08 2016.01.02 date      17
2014.08 10/1/2014  date      2
2014.08 24         month     24
2014.08 07/2015    date_part 11
2014.08 2/16       date_part 18

一个困难是与value的不一致。 datedate_part的格式不一致,这意味着可能需要开发更全面的功能以涵盖所有可能性。

相关问答

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