kdb 按行在 select 中应用函数

kdb apply function in select by row

我有一个table

t: flip `S`V ! ((`$"|A|B|"; `$"|B|C|D|"; `$"|B|"); 1 2 3)

和一些口述

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

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

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 和 v 作为完整的列向量传入
update l:f[S,V] from t;

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

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

你的情况:

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

为了帮助您使用伪代码函数,您可能需要使用 $,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 子句,但 $ 期望一个因此最后是空字典。

另请注意,在您的 table 中,列 SV 已转换为符号。 vs 期望字符串拆分,因此我不得不使用 string 操作 - 如果您能够重新定义原始 table.

,则可以删除该操作

希望对您有所帮助!