根据其他列值在 kdb 中添加列
Adding Columns in kdb based on other columns value
我在名为 test 的数据框中有一个这样的列:
Name Client
A P
B Q
C R
D S
E T
我需要在同一个数据框中创建一个新的列 clienttype,条件是,如果 Client = P 或 Q clienttype = first。如果 client type = R 或 S clienttype = second 等等。谁能告诉我如何在 kdb 中执行此操作?谢谢
这可以用字典解决吗?
q)update ClientType:(`P`Q`R`S!`first`first`second`second)Client from tab
Name Client ClientType
----------------------
A P first
B Q first
C R second
D S second
E T
对此的扩展:对于这些类型的问题,您还可以使用向量条件 ?[;;]
。不幸的是,在这种情况下,会导致许多嵌套向量条件:
update Clienttype:?[Client in`P`Q;`first;?[Client in`R`S;`second;`third]]from tab
Name Client Clienttype
----------------------
A P first
B Q first
C R second
D S second
E T third
如果您只有两个可能的选择(例如 first
和 second
),这种方法可能很有用。
您没有告诉我们您 table 中列的类型,但如果您的所有条目都是单个字母,则最好用 q 字符类型表示:
q)show t:([]Name:"ABCDE";Client:"PQRST")
Name Client
-----------
A P
B Q
C R
D S
E T
现在,Clienttype 最好存储为一个数字,可以计算为
q)update Clienttype:1+(("i"$Client)-"i"$"P")div 2 from t
Name Client Clienttype
----------------------
A P 1
B Q 1
C R 2
D S 2
E T 3
或者如果您必须使用符号,
q)types:`first`second`third`fourth
q)update Clienttype:types(("i"$Client)-"i"$"P")div 2 from t
Name Client Clienttype
----------------------
A P first
B Q first
C R second
D S second
E T third
我在名为 test 的数据框中有一个这样的列:
Name Client
A P
B Q
C R
D S
E T
我需要在同一个数据框中创建一个新的列 clienttype,条件是,如果 Client = P 或 Q clienttype = first。如果 client type = R 或 S clienttype = second 等等。谁能告诉我如何在 kdb 中执行此操作?谢谢
这可以用字典解决吗?
q)update ClientType:(`P`Q`R`S!`first`first`second`second)Client from tab
Name Client ClientType
----------------------
A P first
B Q first
C R second
D S second
E T
对此的扩展:对于这些类型的问题,您还可以使用向量条件 ?[;;]
。不幸的是,在这种情况下,会导致许多嵌套向量条件:
update Clienttype:?[Client in`P`Q;`first;?[Client in`R`S;`second;`third]]from tab
Name Client Clienttype
----------------------
A P first
B Q first
C R second
D S second
E T third
如果您只有两个可能的选择(例如 first
和 second
),这种方法可能很有用。
您没有告诉我们您 table 中列的类型,但如果您的所有条目都是单个字母,则最好用 q 字符类型表示:
q)show t:([]Name:"ABCDE";Client:"PQRST")
Name Client
-----------
A P
B Q
C R
D S
E T
现在,Clienttype 最好存储为一个数字,可以计算为
q)update Clienttype:1+(("i"$Client)-"i"$"P")div 2 from t
Name Client Clienttype
----------------------
A P 1
B Q 1
C R 2
D S 2
E T 3
或者如果您必须使用符号,
q)types:`first`second`third`fourth
q)update Clienttype:types(("i"$Client)-"i"$"P")div 2 from t
Name Client Clienttype
----------------------
A P first
B Q first
C R second
D S second
E T third