2013-02-27 38 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

相关问题