2013-02-27 6 views
1

다음과 같이 내 브로커 중 한 곳에서 텍스트 파일로 거래 보고서를받습니다. 나는 그것을 분석하기 위해 분석하려고 노력 중이다. 문제는 각 레코드가 하나의 집계 행 (BUY 또는 SELL 이하의 경우 * 표시가 있음)을 포함하여 여러 행이 있다는 것입니다. 순간 행이 여러 행을 전달할 수도 있고 그렇지 않을 수도있는 다중 행 fwf 형식을 읽는 방법

TRADE SETTL AT  BUY   SELL  CONTRACT DESCRIPTION   EX TRADE PRICE CC DEBIT(DR)/CREDIT 
------- ------- -- -------------- -------------- ------------------------------ -- ----------- -- -------------------- 
11/26/2   F1       1 JAN 13 SOYBEAN MEAL   01 424.70 US 
                ELECTRONIC TRADE 
       F1       1*         COMMISSION US    1.20DR 
       F1              EXCHANGE & CLEARING FEE US    .81DR 
       F1                  NFA FEE US    .02DR 
       F1              TOTAL COMMISSION & FEES US    2.03DR 
11/28/2   F1    1     DEC 12 SWISS FRANC    16 107.490 US 
                ELECTRONIC TRADE 
       F1    1*             COMMISSION US    1.20DR 
       F1              EXCHANGE & CLEARING FEE US    .54DR 
       F1                  NFA FEE US    .02DR 
       F1              TOTAL COMMISSION & FEES US    1.76DR 
11/29/2   F1    2     MAR 13 NEW COCOA    06 24.61 US 
                ELECTRONIC TRADE 
       F1    2*             COMMISSION US    2.40DR 
       F1              EXCHANGE & CLEARING FEE US    4.00DR 
       F1                  NFA FEE US    .04DR 
       F1              TOTAL COMMISSION & FEES US    6.44DR 
12/03/2   F1    1     DEC 12 IMM EURO FX    16  1.30000 US 
                ELECTRONIC TRADE 
       F1    1*             COMMISSION US    1.20DR 
       F1              EXCHANGE & CLEARING FEE US    .54DR 
       F1                  NFA FEE US    .02DR 
       F1              TOTAL COMMISSION & FEES US    1.76DR 
12/07/2   F1       3 DEC 12 US $ INDEX    13 80.245 US 
                ELECTRONIC TRADE 
12/07/2   F1    3     DEC 12 US $ INDEX    13 80.250 US 
                ELECTRONIC TRADE 
       F1    3*    3*         COMMISSION US    7.20DR 
       F1              EXCHANGE & CLEARING FEE US    8.10DR 
       F1                  NFA FEE US    .12DR 
       F1              TOTAL COMMISSION & FEES US    15.42DR 

는 난 단지 수집 된 정보에 관심이 마지막 열 DEBIT(DR)/CREDITCONTRACT DESCRIPTION, BUY 및 즉 COMMISSION, EXCHANGE AND CLEARING FEES, NFA FEETOTAL COMMISSION AND FEES 값 아래에 및 필드에 *와 SELL 수량을 지정한 즉로 무엇입니까?

모든 포인터 어떻게이 작업을 수행 할 수 있습니까?

read.fwf을 사용해 보았지만 여러 레코드가 각 레코드마다 다르므로 나에게 적합하지 않습니다.

궁극적으로 아무 것도 작동하지 않으면 필자는 라인별로 파서를 작성해야한다. 필자는 필자가 지금보다 더 우아한 방식으로 수행 할 수 있는지 알아보기 위해 노력하고있다.

+0

위 샘플에서 관심있는 데이터를 상상할 수있는 형식으로 표시 할 수 있습니까? 덕분에 – A5C1D2H2I1M1N2O1R2T1

답변

1

데이터가 날짜별로 그룹화되어 있으므로 스캔 한 후 lapply을 사용하여 처리합니다.

dat <- scan('yourfile_name',what='character') 
ids <- c(grep('[0-9]+/[0-9]+/[0-9]',dat),length(dat)) 
lapply(head(seq_along(ids),-1),function(x) 
{ 
    y <- dat[ids[x]:(ids[x+1]-1)] 
    list(desc = paste(y[4:8] ,collapse=' '), 
     dd = y[1], 
     debit_credit = y[grep('.*DR',y)], 
     trde_price = as.numeric(y[grep('[0-9]+[.][0-9]+$',y)]) 
     ) 
}) 
[[1]] 
[[1]]$desc 
[1] "JAN 13 SOYBEAN MEAL 01" 
[[1]]$dd 
[1] "11/26/2" 
[[1]]$debit_credit 
[1] "1.20DR" ".81DR" ".02DR" "2.03DR" 
[[1]]$trde_price 
[1] 424.7 

[[2]] 
[[2]]$desc 
[1] "DEC 12 SWISS FRANC 16" 

..... 

PS : 나는 B/S의 정보를 잃어 버렸습니다. 희망이 도움이됩니다.

+0

! 그것은 나를 위해 시작하기에 충분하다. 그것을 날짜로 나누는 것은 나에게 좋은 출발점이다. –

+0

@geektrader cool! B/S 정보에 대한 해결 방법이 있는지 알려주십시오. – agstudy

1

agstudy의 대답은 매우 유용합니다. 대체 접근법을 제안 할 것입니다. 먼저 삑하는 입력 파일을 수정하십시오. 소스 프로그램에 접근 할 수없고 출력 형식을 변경할 수 없다면 최소한 텍스트 편집기에서 다음을 수행 할 수 있습니다 (심지어 Microsoft Word라고도합니다 :-)).

수정 : 아래 제안 사항은 뒤로입니다. 즉, 뒤에 날짜 문자열이 오는 줄을 유지하고 싶을 것입니다. 개념은 동일하지만 검색 용어를 수정하여 "아무것도 있지만 ..."을 찾습니다. 잘못된 방향으로 유감스럽게 생각합니다.

글로벌 검색을 수행하고 두 자리 숫자 뒤에 단락 기호 (라인 끝)에 대한 교체와 "/"및 탭과 같은 2 개 숫자와 단어 "/"

이 교체 FIND what ^13([0-9]{2,2}/) REPLACE with ^t\1; regexp를 지원하는 편집자는 조금씩 다르게 할 것입니다. 이제 소스 파일에는 각 날짜 입력에 대해 하나의 (longish) 행이 있으며 관심있는 열을 쉽게 추출 할 수 있습니다.

+0

제안 해 주셔서 감사합니다. 파일을 수정하는 방법을 생각했지만 여전히 프로그래밍 방식으로 할 필요가 있으며 R에서 모든 것을 수행하기를 바랬습니다. –

+0

@geektrader'R '에서 "anything"을 할 수 있습니다. 즉,'system ('awk your_file something_regexp-y ')':-) –