2016-04-11 28 views
1

'un son satırını atlayarak kullanıyorum Yüzlerce .csv dosyasına sahibim. Fread'i kullanarak okumam ve tek bir veri tablosu olarak kaydetmem gerekiyor. Temel yapı her bir .csv için aynıdır. Atlanması gereken başlık bilgisi var (skip = kullanımı kolay). Her bir .csv dosyasının son satırını atlamakta zorluk yaşıyorum. Her bir .csv dosyasının farklı sayıda satırı vardır. Ben Testi klasöründe yalnızca bir dosya varsaR data.table: dosyadaki tüm .csv dosyalarındaki fread kullanarak her

, bu komut dosyası mükemmel (= nrows kullanarak) (= atlama kullanarak) ve son satır ilk satırları atlar:

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

birden fazla dosya kaydetme deney klasör, bu denedim kod şudur: O L yaratmaz

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) 

ve bana bu hata veriyor:

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

Her .csv'nin farklı sayıda satırı olduğunda her bir .csv'nin son satırını nasıl atlayacağınız hakkında herhangi bir fikir var mı?

Data.table sürüm 1.9.6 kullanıyorum. Teşekkürler.

+3

Çok fazla çaba harcayan 'readLines' kullanmayın. Buradaki yaklaşımı deneyin: http://stackoverflow.com/questions/3137094/how-to-count-lines-in-a-document – MichaelChirico

+3

Belki 'nrow', dosyanın altından satırları atlamak için negatif bir değer kullanabilir. Dosyalanmış [# 1643] (https://github.com/Rdatatable/data.table/issues/1643). – Arun

+4

Belki de '-n-1' kafası doğrudan 'fread'e geçmiştir. Veya bir dipnot metnini kaldırmak için bir grep -v'. [Bu yeni sayfanın] 1. bölümüne bakın (https://github.com/Rdatatable/data.table/wiki/Convenience-features-of-fread). –

cevap

1

Benim için çalıştı ne burada biraz geç, ama:

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) 

Burada path içine aradığınız dizine karşılık gelir. Adların tüm okunan dosyalar için benzer olduğunu varsayarak, names'u kullanarak her zaman bigdata için yeni bir ad tanımlayabilirsiniz. Bu yardımcı olur umarım!

İlgili konular