2013-02-27 39 views
1

我從我的經紀人之一得到貿易報告如下在文本文件中。我試圖解析它來做一些分析。問題是每條記錄有多行,包括一個聚合行(標有*表示買入或賣出,低於該行)。如何閱讀多行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 

目前我只對彙總信息即CONTRACT DESCRIPTIONBUYSELL數量與它和領域*以下即COMMISSIONEXCHANGE AND CLEARING FEESNFA FEETOTAL COMMISSION AND FEES值作爲最後一列DEBIT(DR)/CREDIT指定感興趣嗎?

任何指針我該如何去做這件事?

我試過使用read.fwf但它不適用於我,因爲多行格式對於每個記錄都不相同。

最終,如果什麼都不起作用,我將不得不逐一寫行解析器,我現在試圖避免看看它是否能以更優雅的方式完成。

+0

從上面的示例中,您是否可以更新您的問題,以您想象的格式顯示您將感興趣的數據? – A5C1D2H2I1M1N2O1R2T1 2013-02-27 07:48:01

回答

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

謝謝!這對我來說已經夠好了。用日期分割它對我來說是很好的起點。 – 2013-02-28 05:40:12

+0

@geektrader酷!告訴我你是否得到了B/S信息的解決方法。 – agstudy 2013-02-28 05:41:25

1

agstudy的回答看起來非常有幫助。我將建議一種替代方法:首先修復流氓輸入文件。如果你無法進入源程序並改變輸出格式,至少你可以在任何文本編輯器中進行以下操作(甚至,我敢說,MicrosoftWord :-))。

編輯:下面的建議是倒退的,即你可能想保留只有後面跟着日期字符串的行尾。這個概念是相同的,但是用mod來搜索「除了...之外的任何東西」。抱歉,誤導。

進行全局搜索並替換爲一個段落標記(行尾),其次是兩個數字和一個「/」,並用標籤和相同的2位數字和「/」

在Word中,這種取代將是FIND what ^13([0-9]{2,2}/) REPLACE with ^t\1;支持正則表達式的編輯會做一點不同。 現在,您的源文件對於每個日期條目都有一個(較長的)行,並且您可以輕鬆地提取感興趣的列。

+0

感謝您的建議。我想修復這個文件,但是我仍然需要以編程的方式來完成,我希望能夠在R中做所有事情。 – 2013-02-28 05:39:15

+0

@geektrader你可以在R中做任何事情,即使這意味着'system('awk your_file something_regexp-y')':-) – 2013-02-28 10:19:05

相關問題