我在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
另一个文件可能具有不同数量的这些标头。另请注意,记录占用多行,大多数文件在开始新页面之前完成记录,但有些文件坚持将记录的第二行推送到新页面,这就是为什么我需要将它们全部删除
感谢您的帮助!
答案 0 :(得分:0)
由于您没有给出明确的数据示例,我不确定给定的解决方案。
如果我了解您在'Page'和'start'之间有部分(标题)的文档,那么您要删除它。这里有一个包含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"