2017-10-04 178 views
1

如何添加包含另一個包含符號列的子字符串的列。所以,去從KDB獲取子字符串

t:flip `date`sym`pos!(`d1`d1`d1`d2;`aaaA1`bbbA1`aaaA2`aaaA3;1 2 3 1) 

date sym pos 
d1 aaaA1 1 
d1 bbA1  2 
d1 aaaA2 3 
d2 aaaA3 1 

t:flip `date`sym`pos`ext!(`d1`d1`d1`d2;`aaaA1`bbbA1`aaaA2`aaaA3;1 2 3 1;`aaa`bbb`aaa`aaa) 

date sym pos ext 
d1  aaaA1 1 aaa 
d1  bbA1 2 bb 
d1  aaaA2 3 aaa 
d2  aaaA3 1 aaa 

編輯。子字符串應該總是包含第一個len(符號)-2個字符,所以在我上面的示例中,aaa代表aaaAx和bb代表bbAx

回答

1

如果您希望提取的子字符串長度不變,那麼可以這樣做以下:

q)t:flip `date`sym`pos!(`d1`d1`d1`d2;`aaaA1`bbbA1`aaaA2`aaaA3;1 2 3 1) 
q)update ext:`$3#'string sym from t 
date sym pos ext 
------------------ 
d1 aaaA1 1 aaa 
d1 bbbA1 2 bbb 
d1 aaaA2 3 aaa 
d2 aaaA3 1 aaa 

如果不是的話,請提供與問候一些詳細介紹如何提取的子字符串可以識別

希望這有助於

喬納森

+0

感謝您的回答。我提供了更多關於編輯子字符串的細節 – chrise

+1

在這種情況下,您可以使用 'update ext:\'$ -2_'string sym from t' –

1

可以有一個聰明的方式來應用下面,但這是我第一次想到。

t:flip `date`sym`pos!(`d1`d1`d1`d2;`aaaA1`bbbA1`aaaA2`aaaA3;1 2 3 1) 
t: update ctr: {-2 + count string x} each sym from t; 
t:{[x] :update ext:x[`ctr]#string(x[`sym]) from x} each t; 

第二線被施加您的邏輯:LEN(符號) - 2- 第三線正在字符的「​​點擊率」號碼從原始符號字符。

+0

啊,甜蜜......我到了第二行,基於Jonathon's回答,但我無法讓它在更新中工作。不知道'每個t'。謝謝 – chrise

+0

如果你正在運行這個非常大的數據集(〜數億行),性能可能是一個問題,因爲上面的代碼將每行傳遞給函數。在這種情況下,你可能想優化代碼..其他情況下,我認爲它應該沒問題。 – jeonw

0

使用drop

q)t:flip `date`sym`pos!(`d1`d1`d1`d2;`aaaA1`bbA1`aaaA2`aaaA3;1 2 3 1) 
q)update ext:`$-2_'string sym from t 
date sym pos ext 
------------------ 
d1 aaaA1 1 aaa 
d1 bbA1 2 bb 
d1 aaaA2 3 aaa 
d2 aaaA3 1 aaa 
0

你沒有這麼說,但這是KDB +,所以我們假設:

  • 你的表是長
  • sym列有重複

您不需要將所有符號轉換爲字符串,並且回來:只有不同的。 (在這個例子中,我已經改變了創建重複的標誌之一。)

q)t:flip `date`sym`pos!(`d1`d1`d1`d2;`aaaA1`bbbA1`aaaA2`aaaA1;1 2 3 1) 
q)update ext:{nub:distinct x;(`$-2 _'string nub)nub?x}sym from t 
date sym pos ext 
------------------ 
d1 aaaA1 1 aaa 
d1 bbbA1 2 bbb 
d1 aaaA2 3 aaa 
d2 aaaA1 1 aaa 

utility .Q.fu適用的功能,獨特的項目。

q)update ext:.Q.fu[{`$-2 _'string x};sym] from t 
date sym pos ext 
------------------ 
d1 aaaA1 1 aaa 
d1 bbbA1 2 bbb 
d1 aaaA2 3 aaa 
d2 aaaA1 1 aaa 

此操作會更快,如果sym柱已經存儲爲enumeration,因爲不同的值隨後將被提供無需計算。