Come leggere.table () più file in una singola tabella in R?

Ho nomi di file con nome ..csv e mi piacerebbe creare grafici per ogni test. Il modo migliore che posso vedere per fare ciò è creare una tabella R per ogni TestName. Ogni test produce le stesse colonne di dati, quindi mi piacerebbe inserire tutti i dati per ogni test in un databile R con una colonna aggiuntiva per i dati di input.

Mi piacerebbe fare:

 read.tables(c("B217.SE.csv", "C10.SE.csv"), sep=",") 

produce (per esempio):

  Filename col1 col2 1 B217.SE.csv 1 2 2 B217.SE.csv 2 4 3 C10.SE.csv 3 1 4 C10.SE.csv 4 5 

Qual è il modo giusto per farlo? Qualche funzione esistente che non conosco? Scrivendolo nel linguaggio R usando un ciclo for?

Non riesco a testarlo sui tuoi dati, ma vorresti utilizzare una funzione di tipo apply come questa:

 data <- do.call("rbind", lapply(c("file1", "file2"), function(fn) data.frame(Filename=fn, read.csv(fn) )) 

Oppure, puoi semplificarlo usando plyr . Ecco una simulazione approssimativa di come funzionerebbe (utilizzando i frame di dati anziché i file):

 > df1 <- data.frame(c1=1:5, c2=rnorm(5)) > df2 <- data.frame(c1=3:7, c2=rnorm(5)) 

In questo caso userò get invece di read.csv :

 > data <- ldply(c("df1", "df2"), function(dn) data.frame(Filename=dn, get(dn))) > data Filename c1 c2 1 df1 1 -0.15679732 2 df1 2 -0.19392102 3 df1 3 0.01369413 4 df1 4 -0.73942829 5 df1 5 -1.27522427 6 df2 3 -0.33944114 7 df2 4 -0.12509065 8 df2 5 0.11225053 9 df2 6 0.88460684 10 df2 7 -0.70710520 

modificare

Prendendo il suggerimento di Marek, puoi sovrascrivere o creare la tua funzione:

 read.tables <- function(file.names, ...) { require(plyr) ldply(file.names, function(fn) data.frame(Filename=fn, read.csv(fn, ...))) } data <- read.tables(c("filename1.csv", "filename2.csv")) 

Prova questo:

 ## take files. files <- list.files(pattern=".csv") ## read data using loop DF <- NULL for (f in files) { dat <- read.csv(f, header=T, sep="\t", na.strings="", colClasses="character") DF <- rbind(DF, dat) }