Foro de debate

funciones para leer directorios

funciones para leer directorios

de noelia otero -
Número de respuestas: 6
hola!
mi problema es el siguiente:
trato de hallar el coeficiente de spearman entre una serie de datos.
Mi problema es que, necesito leer un directorio donde se encuentran los datos, pero dentro de este, tengo otros, y uno es al que tengo que acceder para leer los archivos.csv. Y ademas debo hacer los mismo para distintos directorios(todos se llaman igual E0001,E0002...(cambiando las tres ultimas cifras). Y dentro de cada E0001, tengo otra carpeta con los archivos de datos que necesito.
Necesitaria crear alguna funcion, que entre en el directorio y con un bucle recorrer todos los archivos que me interesan?pero no se como hacer para crear la variable y que vaya cambiando.
Espero haberme explicado con claridad.
Muchas gracias
saludos
En respuesta a noelia otero

Re: funciones para leer directorios

de Franz Jimeno -
Hola,

a ver si te puedo ayudar.

Primero tienes una funcion que modifica el directorio en el que estás trabajando.

setwd(nombre del directorio)

si quieres saber en que directorio te encuentras en cada momento:

getwd()

una vez te has colocado en el directorio guarda en una variable todos los ficheros del directorio:

ficheros <- dir()

Después con un bucle recorre "ficheros", en cuanto se cumpla que el fichero es el que buscas, ejecuta una función.

Espero que te valga.

Un saludo

Franz
En respuesta a Franz Jimeno

Re: funciones para leer directorios

de Mikel Viñuales Lasheras -

Hola Franz,

Tengo duda respecto a lo que comentáis.

En mi caso estoy trabajando en un directorio donde tengo varias carpetas. Mi objetivo es acceder a cada una de esas carpetas y leer desde mi script un fichero .csv.

Una vez que estoy dentro del bucle, no se cómo hacer para acceder a cada carpeta de forma individual. Agradecería cualquier consejo.

dire<-getwd()
setwd(dire)

list.files(path = dire,recursive = F)
b<-as.vector(list.files())
for (i in 1:length(b))


Gracias.


MIKEL

En respuesta a Mikel Viñuales Lasheras

Re: funciones para leer directorios

de Manuel Muñoz Márquez -
Buenas:

Tendrás que leer primero las carpetas y luego los ficheros en cada carpeta. Creo que el siguiente código hace lo que quieres

ld <- list.dirs('/tmp', recursive = FALSE)
for (i in ld) {
    lf <- list.files(i)
    for (j in lf) {
        # Procesar el archivo j
        cat('Directorio', i, 'archivo', j, '\n')
    }
}

La salida es

Directorio /tmp/a archivo a1
Directorio /tmp/a archivo a2
Directorio /tmp/a archivo a3
Directorio /tmp/b archivo b1
Directorio /tmp/b archivo b2
Directorio /tmp/c archivo c1

Saludos.
En respuesta a Manuel Muñoz Márquez

Re: funciones para leer directorios

de Mikel Viñuales Lasheras -

Hola,

Ya conseguí resolver el problema. Gracias Manuel por la función list.dirs (yo estaba empeñado en usar list.folder, pero no existe).

Os adjunto la solución que yo he encontrado, por si en un futuro a alguien le viene bien. Se aceptan sujerencias y mejoras.

El objetivo era el siguiente: Tenía una carpeta, la cual contenía varías subcarpetas y en cada una de ellas existía un archivo csv. Desde el script de la carpeta principal, necesitaba entrar a cada carpeta, leer el archivo .csv (en cada carpeta el archivo .csv se llamaba "datos_id_X.csv" , X--> es el número que identifica a cada archivo, es ascendente y en orden). Posteriormente agregaba la columna que deseaba en un data.frame.

Queda algo así:

# Limpiar todos los elementos de memoria
rm(list=ls(all=T))
dire<-getwd()
setwd(dire)
print(dire)

VEC<-seq(1,353,16)
data<-data.frame(VEC)

ld<- list.dirs(path=dire, recursive = FALSE)

ide<-""
w<-1
t<-2
for (i in ld) {
  dire<-i
  setwd(dire) # fijo el nuevo directorio de trabajo
  ide[w]<-paste("datos_id_",w,".csv",sep = "")
 
  dato<-read.csv(ide[w],header= T, as.is= T)
  data[t]<-dato[,4]
  w=w+1
  t<-t+1
}


Un saludo


MIKEL

En respuesta a Manuel Muñoz Márquez

Re: funciones para leer directorios

de Esteban Murillo Urrego -

Hola Manuel muchas gracias por tus respuestas 

esta solucion me genera una duda 
como almaceno este for en una variable es que cuando lo hago asi:

Datos <- for (i in ld) {
lf <- list.files(i)
for (j in lf) {
# Procesar el archivo j
Datos <- cat('Directorio', i, 'archivo', j, '\n')
}
}

 

me sale que "Datos" esta Vacío 

 

muchas gracias por tu ayuda 

cordial saludo