Matias Parra
2018-Feb-15 15:43 UTC
[R-es] help (Crear bucle para generar un dataframe a partir de datos .mdb)
Hola, Tengo un conjunto de bases de datos de una encuesta industrial para diferentes años (1995-2014). Las bases de datos están en formato .mdb. A su vez, cada base de datos tiene 3 tablas con una variable "ID" común (la "llave") para vincular las tablas. Quiero realizar análisis estadísticos para analizar la evolución de ciertas variables. Quiero armar un dataframe que contenga todas las bases de datos (1995 a 2014) y todas las tablas (tabla 1 a tabla 3). He podido generar un dataframe que me une las 3 tablas para un año (por ej. 2014) del siguiente modo. library(RODBC) setwd("C:/Users/M/Documents/R data/") base<-odbcConnectAccess("2014") datos1<-sqlQuery(base ,"SELECT * FROM TABLA1_2014") datos2<-sqlQuery(base ,"SELECT * FROM TABLA2_2014") datos3<-sqlQuery(base , "SELECT * FROM TABLA3_2014") base1<-Reduce(function(...) merge (...,by="ID", all=T), list(datos1,datos2,datos3)) Sin embargo, no he podido realizar un bucle para hacer este mismo proceso para el conjunto de datos. quiero hacer una función for para automatizar el proceso. agradecería una ayuda al respecto. <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail> Libre de virus. www.avast.com <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail> <#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2> [[alternative HTML version deleted]]
Freddy Omar López Quintero
2018-Feb-15 16:10 UTC
[R-es] help (Crear bucle para generar un dataframe a partir de datos .mdb)
¡Hola! El jue, 15-02-2018 a las 12:43 -0300, Matias Parra escribió:> library(RODBC) > setwd("C:/Users/M/Documents/R data/") > base<-odbcConnectAccess("2014") > datos1<-sqlQuery(base ,"SELECT * FROM TABLA1_2014") > datos2<-sqlQuery(base ,"SELECT * FROM TABLA2_2014") > datos3<-sqlQuery(base , "SELECT * FROM TABLA3_2014") > base1<-Reduce(function(...) merge (...,by="ID", all=T), > list(datos1,datos2,datos3))Utilizando la función paste() y algún bucle por aquí y por allá podrías reutilizar tu mismo código. Por ejemplo: sqlQuery(base, paste(paste("select * from tabla", s, sep=''), "_", año, sep='')) variando s de 1 a 3 y año de 1995 a 2014, haría el trabajo de seleccionar lo que necesitas para esas tablas y períodos. Luego restaría que la información la acumules o guardes en una lista o donde sea más conveniente. Ojalá sea de ayuda. ¡Salud! -- «...homines autem hominum causa esse generatos...» Cicero [[alternative HTML version deleted]]
Javier Marcuzzi
2018-Feb-15 16:48 UTC
[R-es] help (Crear bucle para generar un dataframe a partir de datos .mdb)
Estimado Matías Parra Puedes utilizar paste como opina Freddy, para ciertas cosas yo supe realizarlo, pero R demora mucho ejecutando, lo lleva a la memoria, luego otra vez en caso de ..., y la verdad es que se optimiza llevando los datos a una base de datos, luego importar esta enterita a R. Una ventaja es por ejemplo si en R encuentra cierto valor que le llama la atención, es mucho más práctico buscarlo en la base de datos unificada, aunque se puede realizar todo en R. Javier Rubén Marcuzzi El 15 de febrero de 2018, 13:10, Freddy Omar López Quintero < freddy.vate01 en gmail.com> escribió:> ¡Hola! > > El jue, 15-02-2018 a las 12:43 -0300, Matias Parra escribió: > > library(RODBC) > > setwd("C:/Users/M/Documents/R data/") > > base<-odbcConnectAccess("2014") > > datos1<-sqlQuery(base ,"SELECT * FROM TABLA1_2014") > > datos2<-sqlQuery(base ,"SELECT * FROM TABLA2_2014") > > datos3<-sqlQuery(base , "SELECT * FROM TABLA3_2014") > > base1<-Reduce(function(...) merge (...,by="ID", all=T), > > list(datos1,datos2,datos3)) > > Utilizando la función paste() y algún bucle por aquí y por allá podrías > reutilizar tu mismo código. > > Por ejemplo: > > sqlQuery(base, paste(paste("select * from tabla", s, sep=''), "_", año, > sep='')) > variando s de 1 a 3 y año de 1995 a 2014, haría el trabajo de > seleccionar lo que necesitas para esas tablas y períodos. Luego > restaría que la información la acumules o guardes en una lista o donde > sea más conveniente. > > Ojalá sea de ayuda. > > ¡Salud! > > > -- > «...homines autem hominum causa esse generatos...» > > Cicero > [[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 >[[alternative HTML version deleted]]
Freddy Omar López Quintero
2018-Feb-15 20:05 UTC
[R-es] help (Crear bucle para generar un dataframe a partir de datos .mdb)
El jue, 15-02-2018 a las 16:18 -0300, Matias Parra escribió:> el problema que veo me aparece, es que previo al sqlQuery, debo > llamar la base de datos con odbcConnectAccess ("nombre archivo"). si > lo hago base por base me demoraría bastante.Si RODBC no te funciona como esperas y tienes los .mdb, podrías utilizar también la librería Hmisc, con algo como: library(Hmisc)mdb.get(paste(año, ".mbd", sep=''), tables=paste("tabla", s, "_", año, sep='')) que quizá es un poco más limpio **pero** realmente no sé si vaya a hacer el trabajo más rápido. Supongo que esto depende más de las bases de datos de access y su tamaño que de la importación propiamente (¿?). Ojalá sea de utilidad. ¡Salud! -- «...homines autem hominum causa esse generatos...» Cicero [[alternative HTML version deleted]]