2017-10-04 3 views
1

기호를 포함하는 다른 열의 하위 문자열을 포함하는 열을 어떻게 추가 할 수 있습니까? 그래서,KDB get substring

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 

EDIT로 이동합니다. 하위 문자열은 항상 첫 번째 len (기호) -2 문자를 포함해야합니다. 위 예제에서 aaaAx는 aaa이고 bbAx는 bbb입니다.

답변

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_st sym from t' –

1

아래에 이것을 적용하는 영리한 방법이있을 수 있지만 이것은 내가 처음 생각한 것입니다. - 2 3 라인은 원래의 기호 문자에서 문자 '클릭률'을 추진하고 있습니다 LEN (기호) :

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; 

2 라인의 로직을 적용한다.

+0

아, 달콤한 ... 나는 조나단에 기초한 두 번째 줄에 있습니다. 대답,하지만 couldnt는 그것을 업데이 트에서 작동하도록. didnt는 '{} each 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

당신은 너무 말을하지 않았지만,이 산업 은행의 +이다, 그래서 가정하자 :

  • 테이블이
  • 당신의 sym 열이 중복
  • 을 가지고 긴

모든 기호를 문자열로 변환 할 필요가 없습니다. 뒤 : 별개의 것들만. (이 예에서, I은 복제를 생성하는 심볼의 일 변경했습니다.)

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는 별개의 항목에 함수를 적용한다. sym 열 이미 enumeration로 저장된다면 고유 값은 다음 계산없이 가능하기 때문

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 

이 조작 빠르게 될 것이다.