2016-04-11 4 views
1

私はfreadを使用して読み込み、1つのデータテーブルとして保存する必要がある何百もの.csvファイルがあります。基本的な構造は.csvごとに同じです。スキップする必要があるヘッダー情報があります(スキップ=を使用すると簡単です)。各.csvファイルの最後の行をスキップするのに問題があります。各.csvファイルの行数は異なります。R data.table:各ファイルの最後の行をスキップするフォルダ内のすべての.csvファイルにfreadを使用

私はTestフォルダに一つだけのファイルを持っている場合は、このスクリプトは完全に(= 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 '。 [この新しいページ](https://github.com/Rdatatable/data.table/wiki/Convenience-features-of-fread)のセクション1を参照してください。 –

答えて

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はあなたに探しているディレクトリを指します。私は名前がすべての読み込みファイルの名前と似ていると仮定しています。そうでなければ、bigdataの新しい名前をいつでも定義できます。namesを使用します。お役に立てれば!

関連する問題