Alejandro J. Estudillo
2014-Jul-06 12:32 UTC
[R-es] abrir varios archivos a la vez y colocarlos en un mismo data frame
Buenos tardes, A ver si alguien puede ayudarme. Tengo una carpeta con 20 archivos. Cada uno de estos archivos es un data.frame con las puntuaciones de un participante. Me gustaría escribir una instrucción para que todos estos datos se agrupen en un solo data.frame. El caso es que para el primer de los archivos tendría que leer los headers, pero no para el resto (ya que los headers son los mismos para cada sujeto). He intentado correr el siguiente código files<-list.files(path="D:/prueba") for(i in 1:length(files)){ if(i==1){ matriz<-read.csv(files [i], header=TRUE) }else{ tmp<-read.csv(files[i],header=FALSE) matriz<-rbind(matriz,tmp) } } Sin embargo, obtengo el siguiente error: Error in rep(xi, length.out = nvar) : attempt to replicate an object of type 'closure' Alguna idea de que puede estar fallando? Gracias!! Alex [[alternative HTML version deleted]]
Jorge I Velez
2014-Jul-06 12:39 UTC
[R-es] abrir varios archivos a la vez y colocarlos en un mismo data frame
Estimado Alejandro, Lo mejor es trabajar con listas, sea creadas antes de o despues de leer los datos (esto ultimo automaticamente desde R). En cuanto a los nombres de las variables, creo que ahorras tiempo y problemas si los incluyes. A continuacion un ejemplo (necesitas el paquete "mets"): # install.packages('mets') require(mets) files <- list.files(path="D:/prueba") info <- do.call(rbind, lapply(files, function(x) as.data.frame(fread(x, header = TRUE)))) head(info) Como veras, no uso read.csv(), pero el resultado es el mismo y se obtiene en mucho menos tiempo que con cualquier version de read.*(). Saludos, Jorge.- 2014-07-06 22:32 GMT+10:00 Alejandro J. Estudillo <ajestudillo@gmail.com>:> Buenos tardes, > > > > A ver si alguien puede ayudarme. Tengo una carpeta con 20 archivos. Cada > uno > de estos archivos es un data.frame con las puntuaciones de un participante. > Me gustaría escribir una instrucción para que todos estos datos se agrupen > en un solo data.frame. El caso es que para el primer de los archivos > tendría que leer los headers, pero no para el resto (ya que los headers son > los mismos para cada sujeto). He intentado correr el siguiente código > > > > files<-list.files(path="D:/prueba") > for(i in 1:length(files)){ > if(i==1){ > matriz<-read.csv(files [i], header=TRUE) > }else{ > tmp<-read.csv(files[i],header=FALSE) > matriz<-rbind(matriz,tmp) > } > } > > > > Sin embargo, obtengo el siguiente error: Error in rep(xi, length.out > nvar) > : attempt to replicate an object of type 'closure' > > > > Alguna idea de que puede estar fallando? > > > > Gracias!! > > > > Alex > > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >[[alternative HTML version deleted]]
Alejandro José Estudillo Hidalgo
2014-Jul-06 15:39 UTC
[R-es] abrir varios archivos a la vez y colocarlos en un mismo data frame
Gracias por tu respuesta Jorge. El problema es que necesito que el nombre de las variables sólo aparezca en la primera fila de la matriz de datos final. Es para poder realizar análisis. Por eso en mi instrucción le pedía que leyese los nombre de las variables pero sólo para la el primer archivo. El 6 de julio de 2014, 13:39, Jorge I Velez <jorgeivanvelez@gmail.com> escribió:> Estimado Alejandro, > > Lo mejor es trabajar con listas, sea creadas antes de o despues de leer > los datos (esto ultimo automaticamente desde R). En cuanto a los nombres > de las variables, creo que ahorras tiempo y problemas si los incluyes. > > A continuacion un ejemplo (necesitas el paquete "mets"): > > # install.packages('mets') > require(mets) > > files <- list.files(path="D:/prueba") > info <- do.call(rbind, lapply(files, function(x) as.data.frame(fread(x, > header = TRUE)))) > head(info) > > Como veras, no uso read.csv(), pero el resultado es el mismo y se obtiene > en mucho menos tiempo que con cualquier version de read.*(). > > Saludos, > Jorge.- > > > > 2014-07-06 22:32 GMT+10:00 Alejandro J. Estudillo <ajestudillo@gmail.com>: > >> Buenos tardes, >> >> >> >> A ver si alguien puede ayudarme. Tengo una carpeta con 20 archivos. Cada >> uno >> de estos archivos es un data.frame con las puntuaciones de un >> participante. >> Me gustaría escribir una instrucción para que todos estos datos se agrupen >> en un solo data.frame. El caso es que para el primer de los archivos >> tendría que leer los headers, pero no para el resto (ya que los headers >> son >> los mismos para cada sujeto). He intentado correr el siguiente código >> >> >> >> files<-list.files(path="D:/prueba") >> for(i in 1:length(files)){ >> if(i==1){ >> matriz<-read.csv(files [i], header=TRUE) >> }else{ >> tmp<-read.csv(files[i],header=FALSE) >> matriz<-rbind(matriz,tmp) >> } >> } >> >> >> >> Sin embargo, obtengo el siguiente error: Error in rep(xi, length.out >> nvar) >> : attempt to replicate an object of type 'closure' >> >> >> >> Alguna idea de que puede estar fallando? >> >> >> >> Gracias!! >> >> >> >> Alex >> >> >> [[alternative HTML version deleted]] >> >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es@r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> >> >-- *La civilización nos ha liberado de ciertas condiciones aversivas del ambiente, pero ciertamente no nos ha liberado del ambiente mismo.(Skinner, 1971)* [[alternative HTML version deleted]]