kdb在按行选择中应用函数

时间:2018-02-13 06:35:29

标签: kdb

我有一张桌子

t1: 4 10 15 20 ! 1 2 3 5;
t2: 4 10 15 20 ! 0.5 2 4 5;

和一些dicts

f:{[s;v];
    if[`A in "|" vs string s; t:t1;];
    else if[`B in "|" vs string s; t:t2;];
    k: asc key t;
    :t k k binr v;
}

现在我需要在S中的子串和下面的函数中添加一个带有值的列(这是一个伪代码,因为我被困在这里)。

update l:f[S,V] from t;

当我做

之类的事情时,问题是s和v作为完整列向量传递
where

如何使这个按行工作? 我怎样才能使它成为一个矢量化函数? 感谢

2 个答案:

答案 0 :(得分:5)

您需要使用each-both副词逐行应用两个函数。

在你的情况下:

update l:f'[S;V] from t;

答案 1 :(得分:1)

为了帮助您的伪代码功能,您可能希望使用$,if-else运算符,例如

f:{[s;v]
  t:$["A"in ls:"|"vs string s;t1;"B"in ls;t2;()!()];
  k:asc key t;
  :t k k binr v;
 };

你没有在你的伪代码中提到最后一个else子句,但$期望最后一个空字典。

另请注意,在您的表格中,SV列已投射到符号中。 vs要求分割字符串,以便我必须使用string操作 - 如果您能够重新定义原始表格,则可以将其删除。

希望这有帮助!