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 中,列 S
和 V
已转换为符号。 vs
期望字符串拆分,因此我不得不使用 string
操作 - 如果您能够重新定义原始 table.
,则可以删除该操作
希望对您有所帮助!
我有一个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 中,列 S
和 V
已转换为符号。 vs
期望字符串拆分,因此我不得不使用 string
操作 - 如果您能够重新定义原始 table.
希望对您有所帮助!