首页 文章

kdb在按行选择中应用函数

提问于
浏览
6

我有一张 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;

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

2 回答

  • 5

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

    在你的情况下:

    update l:f'[S;V] from t;
    
  • 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 操作 - 如果您能够重新定义原始表,则可以删除它 .

    希望这可以帮助!

相关问题