[R-es] abrir varios archivos a la vez y colocarlos en un mismo data frame

Oscar Perpiñan oscar.perpinan en upm.es
Dom Jul 6 17:53:38 CEST 2014


Hola,

¿Qué tal esta opción? Básicamente es lo que propone Jorge pero usando
"read.csv" y añadiendo "scan" para leer la cabecera.

files <- list.files(path="D:/prueba")
tmp <- lapply(files, read.csv, header = FALSE)
matriz <- do.call(rbind, tmp)
header <- scan(files[1], nlines = 1, sep = ",")
names(matriz) <- header

Saludos.

Oscar.
-----------------------------------------------------------------
Oscar Perpiñán Lamigueiro
Dpto. Ingeniería Eléctrica (ETSIDI-UPM)
Grupo de Sistemas Fotovoltaicos (IES-UPM)
URL: http://oscarperpinan.github.io
Twitter: @oscarperpinan


El día 6 de julio de 2014, 17:39, Alejandro José Estudillo Hidalgo
<ajestudillo en gmail.com> escribió:
> 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 en 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 en 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 en 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]]
>
>
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>



Más información sobre la lista de distribución R-help-es