2016-04-11 204 views
1

我有數百個.csv文件需要使用fread讀入並保存爲一個數據表。每個.csv的基本結構都是一樣的。有需要跳過的標題信息(使用skip =很容易)。我很難跳過每個.csv文件的最後一行。每個.csv文件都有不同數量的行。R data.table:在文件夾中的所有.csv文件上使用fread跳過每個文件的最後一行

如果我在測試文件夾中只有一個文件,這個腳本完全跳過第一行(使用跳躍=)和最後一行(使用NROWS =):

file <- list.files("Q:/Test/", full.names=TRUE) 
all <- fread(file, skip = 7, select = c(1:7,9), 
      nrows = length(readLines(file))-9) 

當保存在多個文件test文件夾,這是我試過的代碼:

file <- list.files("Q:/Test/", full.names=TRUE) 
L <- lapply(file, fread, skip = 7, select = c(1:7,9), 
     nrows = length(readLines(file))-9) 
dt <- rbindlist(L) 

它不會產生L和給了我這個錯誤:

Error in file(con, "r") : invalid 'description' argument 

當每個.csv具有不同數量的行時,如何跳過每個.csv的最後一行的任何想法?

我正在使用data.table版本1.9.6。謝謝。

+3

不要使用'readLines',這會浪費很多精力。試試這裏的方法:http://stackoverflow.com/questions/3137094/how-to-count-lines-in-a-document – MichaelChirico

+3

也許'nrow'可以使用負值來跳過文件底部的行。提交[#1643](https://github.com/Rdatatable/data.table/issues/1643)。 – Arun

+4

也許'head -n-1'直接傳遞給'fread'。或者'grep -v'來刪除尾部頁腳文本。參見[這個新頁面]的第1部分(https://github.com/Rdatatable/data.table/wiki/Convenience-features-of-fread)。 –

回答

1

這是一個有點晚了,但在這裏是爲我工作:

fnames <- dir("path", pattern = "csv") 

read_data <- function(z){ 
    dat <- fread(z, skip = 1, select = 1) 
    return(dat[1:(nrow(dat)-1),]) 
} 

datalist <- lapply(fnames, read_data) 

bigdata <- rbindlist(datalist, use.names = TRUE) 

這裏path指的是你正在尋找進入目錄。我假設所有讀取文件的名稱都是相似的,如果不是這樣,您可以使用namesbigdata定義一個新名稱。希望這可以幫助!

相關問題