【问题标题】:Remove a line from list and all successive lines to N?从列表中删除一行并将所有连续行删除到 N?
【发布时间】:2013-06-25 13:58:08
【问题描述】:

我在 R 中有一些列表,它是我正在抓取数据的相对非结构化文档中的一组行。每页的顶部是一个页码,后面是字符串“page”和几行我想删除的标题信息。

每个文档都有不同数量的标题行。到目前为止我的解决方案:

RawFeed.1<- grep("Page",RawFeed)
RawFeed.1a<-length(RawFeed.1)
RawFeed.1<-RawFeed.1[-1]

请注意,第一个实例在此处被删除,因为第一页的标题行总是比其余页面多,并且无论如何都会稍后删除。

y<-RawFeed.1[1]
ya<-c(y:length(RawFeed))

NSearch<-RawFeed[ya]
NSearch.1<-grep("Start", NSearch)
y1<-NSearch.1[1]
y1<-y1-1

y2<-c(0:y1)

由于总是在数据开始之前的行上找到“开始”,因此这始终为我提供了文档特定数量的标题行。

接下来我尝试通过以下方式删除它们:

PageBreak <-function(y) {
RawFeed<-RawFeed[-x-y]
}

RawFeedTemp<-lapply(RawFeed.1,PageBreak,y=y2)

哪个有效,有点 - 我留下了一个数组,RawFeedTemp[[n]] 仅删除了该页面的标题信息。

那么我如何执行类似的操作,留下一个列表,其中每个页面的标题信息已被删除,或者有没有办法组合数组中的元素,使其仅包含一组行,不包括那些我正在尝试删除?

编辑:数据示例

[306] N 46 10/08/12 10/08/12  Stuff :30 NM 0 $0.00" 
[307] Week: 10/08/12 10/14/12 Other Stuff $6,500.00 0.00
[308] " Contract Agreement Between: Print Date 10/05/12 Page 5 of 6"                                                                                                                                                                  
[309] ""                                                                                                                                                                                                                              
[310] ""                                                                                                                                                                                                                              
[311] " Contract / Revision Alt Order #"                                                                                                                                                                                              
[312] " Person                                                                                                                                                                                                                
[313] " Address 1                                                                                                                                                                                                          
[314] " Address 2                                                                                                                                                                                                            
[315] " Address 3                                                                                                                                                                  
[316] " Address 4                                                                                                                                                                   
[317] ""                                                                                                                                                                                                                              
[318] " Original Date / Revision"                                                                                                                                                                                          
[319] ""                                                                                                                                                                                                                 
[320] "08/10/12 / 10/04/12"                                                                                                                                                                                        
[321] ""                                                                                                                                                                                                                              
[322] ""                                                                                                                                                                                                                              
[323] ""                                                                                                                                                                                                                        
[324] "* Line Ch Start Date End Date Description Start
[325] MORE DATA

另一个文件可能有不同数量的这些标题。另请注意,记录占用多行,大多数文件在开始新页面之前完成记录,但少数文件坚持将记录的第二行推送到新页面,这为什么我需要将它们全部删除

感谢您的帮助!

【问题讨论】:

    标签: regex r screen-scraping


    【解决方案1】:

    由于您没有给出明确的数据示例,因此我不确定给定的解决方案。

    如果我了解您的文档包含“页面”和“开始”之间的部分(标题),那么您想删除该文档。这是您的数据示例,其中包含 2 个标题:

    str <- 'Page ......        ### header1 
    alalalala
    lalalalalal
    aalalala
    lslslsls start ksksksks
    keep me 1
    keep me 2
    Page ......               ### header 2
    aalalala
    lslslsls start ksksksks
    keep me 3
    keep me 4'
    

    这里我使用readLines读取文档,并使用grep查找标题行,并从行列表中删除行索引的连接。

    ll <- readLines(textConnection(str))
    ids <- matrix(grep('Page|start',ll),ncol=2,byrow=TRUE)
    ll[-unlist(apply(ids,1,function(x)seq(x[1],x[2])))]
    
    [1] "keep me 1" "keep me 2" "keep me 3" "keep me 4"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-31
      • 1970-01-01
      • 2023-02-08
      • 1970-01-01
      • 2015-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多