我正在使用read.fwf函数组合多个.txt文件。我的问题是每个文本文件前面有几个标题行,在数据实际开始之前从23-28行变化。我想以某种方式删除文件中的前n行,以便我导入和梳理的所有内容都是数据本身。
有没有人有关于如何做到这一点的线索?每个数据文件的开头都是相同的(" 01Jan"),后跟一年。我基本上想删除文件中01Jan之前的所有内容。
现在,我的代码如下:
for (i in 1:length(files.x)){
if (!exists("X")){
X<-read.fwf(files.x[i], c(11,5, 16), header=FALSE, skip=23, stringsAsFactors=FALSE)
X<-head(X, -1) #delete the last row of each table
names(X)<-c("Date", "Time", "Data")
} else if (exists("X")){
temp_X<-read.fwf(files.x[i], c(11,5,16), header=FALSE, skip=23, stringsAsFactors=FALSE) #read in fixed width file
temp_X<-head(temp_X, -1)
names(temp_X)<-c("Date", "Time", "Data")
X<-rbind(X, temp_X)
} }
我需要skip = 23根据正在读入的文件而有所不同。除了手动读取每个文件然后组合之外的任何想法?
答案 0 :(得分:1)
也许
hdr <- readLines(files.x[i],n=50) ## or some reasonable upper bound
firstLine <- grep("^01Jan",hdr)[1]
X <- read.fwf(files.x[i], skip=firstLine-1, ...)
此外,通过fileList <- lapply(files.x,getFile)
读取所有文件会更高效(其中getFile
是您编写的一个小实用程序函数,用于封装单个文件中的读取逻辑)然后{ {1}}