Sebastian Kruk
2017-Aug-08 13:04 UTC
[R-es] unir varios archivos .csv en una serie historica
Hola Eric. Muchas gracias. Era exactamente lo que quería. Te agradezco mucho. Saludos, Sebastián. Enviado desde Correo para Windows 10 De: eric Enviado: martes, 8 de agosto de 2017 8:25 Para: Sebastian Kruk; Lista R Asunto: Re: [R-es] unir varios archivos .csv en una serie historica hola sebastian, invente 3 archivos con la estructura que describes y probe el codigo, le hice un par de arreglos necesarios, ahi va ... funciona bien con los archivos que te adjunto: # usando la libreria data.table library(data.table) setwd("/tu/directorio/con/los/datos/") filenames <- list.files(path = "/tu/directorio/con/los/datos/") # creas un data.table que contendra TODOS los datos de tus archivos datos <- data.table() # ciclo para leer cada archivo i<-1 for (i in 1:length(filenames)) { # 1. leer los datos de un unico archivo data <- data.table() data <- fread(filenames[i], header=TRUE) # 2. transformar la estructura del archivo de filas con hora y columnas con dias a ( columna con dia, columna con hora y columna con precio ) # primero usar stack() ... suponiendo que tu primera columna de datos es la hora del dia y tiene encabezado "horas" data.stacked <- data[,cbind(hora,stack(data, select=-hora))] data.stacked <- as.data.table(data.stacked) setnames(data.stacked,c("ind","values"),c("dia","precio")) # 3. agregar la columna con el nombre del mes data.stacked[, mes:=as.character(substr(filenames[i],1,3))] # 4. uniendo los datos datos <- rbind(datos,data.stacked) i <- i+1 } espero que te sirva, suerte !!!!!!!!!!! eric. On 08/08/2017 06:50 AM, Sebastian Kruk wrote: Hola Eric. Me diste una muy buena orientación. Para algunos años los archivos son de excel donde cada uno tiene 12 hojas, una hoja por mes. Cada hoja tiene el siguiente formato: Hora 1 2 3 4 ? 31 1 0 0 0 0 ? 23 2 0 0 0 24 ? 0 3 0 0 0 24,5 ? 21 4 0 0 0 26 ? 12 ????????? 24 0 0 0 0 ? 0 Por ejemplo en el día 1 el precio en las horas 1, 2, 3, 4 y 24 es 0, en cambio el día 31 el precio a la hora 1 es 23, a las 2 es 0, a las 3 es 21, a las 4 es 12 y a las 24 es 0. Espero no haberlos confundido más. Gracias, Sebastián. Enviado desde mi teléfono con Windows 10 De: eric Enviado: martes, 8 de agosto de 2017 6:52 Para: Sebastian Kruk; Lista R Asunto: Re: [R-es] unir varios archivos .csv en una serie historica Hola sebastian, sin el archivo de datos para probar y ver la estructura de los datos es un poco dificil, pero haciendo algunas suposiciones imagino que algo como esto te puede ayudar, seguro tendras que hacer ajustes: # usando la libreria data.table library(data.table) filenames <- list.files(path = "/tu/path") # creas un data.table que contendra TODOS los datos de tus archivos datos <- data.table() # ciclo para leer cada archivo i<-1 for (i in 1:length(filenames)) { # 0. crear un data.table para contener los datos de tu archivo de forma temporal dentro del ciclo data <- data.table() # 1. leer los datos de un unico archivo data <- as.data.table(fread(filenames[i], header=TRUE)) # 2. transformar la estructura del archivo de filas con hora y columnas con dias a ( columna con dia, columna con hora y columna con precio ) # primero usar stack() ... suponiendo que tu primera columna de datos es la hora del dia y tiene encabezado "horas" data.stacked <- data[,cbind(horas,stack(data, select=-horas))] data.stacked <- as.data.table(data.stacked) # 3. agregar la columna con el nombre del mes data.stacked[, mes:=as.character(substr(filenames[i],posiciondelPRIMERcaracterdelnombredelmes,posiciondelULTIMOcaracterdelnombredelmes))] # 4. uniendo los datos datos <- rbind(datos,data) i <- i+1 } Ojala te sirva, Suerte !!!!!!!!!!!! Eric. On 08/07/2017 06:17 PM, Sebastian Kruk wrote: Estimados usuarios-R: Muy buenas noches. Tengo una serie de archivos csv que contienen los precios mayoristas de electricidad por hora. Cada archivo csv corresponde a un mes de un cierto año. Cada columna corresponde a un día del mes y cada fila a una hora del día (1 a 24 horas). ¿Hay alguna forma rápida de importar todos los datos y formar un vector columna en que cada observación corresponde al precio que se dio en cierta hora en cierto dia en cierto mes en cierto año? Desde ya muchas gracias, Sebastián. [[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 -- Forest Engineer Master in Environmental and Natural Resource Economics Ph.D. student in Sciences of Natural Resources at La Frontera University Member in AguaDeTemu2030, citizen movement for Temuco with green city standards for living Nota: Las tildes se han omitido para asegurar compatibilidad con algunos lectores de correo. -- Forest Engineer Master in Environmental and Natural Resource Economics Ph.D. student in Sciences of Natural Resources at La Frontera University Member in AguaDeTemu2030, citizen movement for Temuco with green city standards for living Nota: Las tildes se han omitido para asegurar compatibilidad con algunos lectores de correo. [[alternative HTML version deleted]]
Carlos Ortega
2017-Aug-08 20:59 UTC
[R-es] unir varios archivos .csv en una serie historica
Hola, Para la próxima vez...: https://cloud.r-project.org/web/packages/easycsv/index.html Saludos, Carlos Ortega www.qualityexcellence.es El 8 de agosto de 2017, 15:04, Sebastian Kruk <residuo.solow en gmail.com> escribió:> Hola Eric. Muchas gracias. Era exactamente lo que quería. Te agradezco > mucho. Saludos, Sebastián. > > Enviado desde Correo para Windows 10 > > De: eric > Enviado: martes, 8 de agosto de 2017 8:25 > Para: Sebastian Kruk; Lista R > Asunto: Re: [R-es] unir varios archivos .csv en una serie historica > > hola sebastian, invente 3 archivos con la estructura que describes y probe > el codigo, le hice un par de arreglos necesarios, ahi va ... funciona bien > con los archivos que te adjunto: > # usando la libreria data.table > library(data.table) > setwd("/tu/directorio/con/los/datos/") > filenames <- list.files(path = "/tu/directorio/con/los/datos/") > # creas un data.table que contendra TODOS los datos de tus archivos > datos <- data.table() > # ciclo para leer cada archivo > i<-1 > for (i in 1:length(filenames)) > { > # 1. leer los datos de un unico archivo > data <- data.table() > data <- fread(filenames[i], header=TRUE) > # 2. transformar la estructura del archivo de filas con hora y > columnas con dias a ( columna con dia, columna con hora y columna con > precio ) > # primero usar stack() ... suponiendo que tu primera columna de > datos es la hora del dia y tiene encabezado "horas" > data.stacked <- data[,cbind(hora,stack(data, select=-hora))] > data.stacked <- as.data.table(data.stacked) > setnames(data.stacked,c("ind","values"),c("dia","precio")) > # 3. agregar la columna con el nombre del mes > data.stacked[, mes:=as.character(substr(filenames[i],1,3))] > # 4. uniendo los datos > datos <- rbind(datos,data.stacked) > i <- i+1 > } > espero que te sirva, > suerte !!!!!!!!!!! > eric. > > > > On 08/08/2017 06:50 AM, Sebastian Kruk wrote: > Hola Eric. Me diste una muy buena orientación. > Para algunos años los archivos son de excel donde cada uno tiene 12 hojas, > una hoja por mes. > > Cada hoja tiene el siguiente formato: > > Hora 1 2 3 4 ? 31 > 1 0 0 0 0 ? 23 > 2 0 0 0 24 ? 0 > 3 0 0 0 24,5 ? 21 > 4 0 0 0 26 ? 12 > ????????? > 24 0 0 0 0 ? 0 > > Por ejemplo en el día 1 el precio en las horas 1, 2, 3, 4 y 24 es 0, en > cambio el día 31 el precio a la hora 1 es 23, a las 2 es 0, a las 3 es 21, > a las 4 es 12 y a las 24 es 0. > > Espero no haberlos confundido más. > > Gracias, > > Sebastián. > > Enviado desde mi teléfono con Windows 10 > > De: eric > Enviado: martes, 8 de agosto de 2017 6:52 > Para: Sebastian Kruk; Lista R > Asunto: Re: [R-es] unir varios archivos .csv en una serie historica > > Hola sebastian, sin el archivo de datos para probar y ver la estructura de > los datos es un poco dificil, pero haciendo algunas suposiciones imagino > que algo como esto te puede ayudar, seguro tendras que hacer ajustes: > # usando la libreria data.table > library(data.table) > filenames <- list.files(path = "/tu/path") > # creas un data.table que contendra TODOS los datos de tus archivos > datos <- data.table() > # ciclo para leer cada archivo > i<-1 > for (i in 1:length(filenames)) > { > # 0. crear un data.table para contener los datos de tu archivo de > forma temporal dentro del ciclo > data <- data.table() > # 1. leer los datos de un unico archivo > data <- as.data.table(fread(filenames[i], header=TRUE)) > > # 2. transformar la estructura del archivo de filas con hora y > columnas con dias a ( columna con dia, columna con hora y columna con > precio ) > # primero usar stack() ... suponiendo que tu primera columna de > datos es la hora del dia y tiene encabezado "horas" > data.stacked <- data[,cbind(horas,stack(data, select=-horas))] > data.stacked <- as.data.table(data.stacked) > > # 3. agregar la columna con el nombre del mes > data.stacked[, mes:=as.character(substr(filenames[i], > posiciondelPRIMERcaracterdelnombredelmes,posiciondelULTIMOcaracterdelno > mbredelmes))] > > # 4. uniendo los datos > datos <- rbind(datos,data) > i <- i+1 > } > Ojala te sirva, > Suerte !!!!!!!!!!!! > Eric. > > > > On 08/07/2017 06:17 PM, Sebastian Kruk wrote: > Estimados usuarios-R: > > Muy buenas noches. > > Tengo una serie de archivos csv que contienen los precios mayoristas de > electricidad por hora. > > Cada archivo csv corresponde a un mes de un cierto año. > > Cada columna corresponde a un día del mes y cada fila a una hora del día (1 > a 24 horas). > > ¿Hay alguna forma rápida de importar todos los datos y formar un vector > columna en que cada observación corresponde al precio que se dio en cierta > hora en cierto dia en cierto mes en cierto año? > > Desde ya muchas gracias, > > Sebastián. > > [[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 > > > > > -- > Forest Engineer > Master in Environmental and Natural Resource Economics > Ph.D. student in Sciences of Natural Resources at La Frontera University > Member in AguaDeTemu2030, citizen movement for Temuco with green city > standards for living > > Nota: Las tildes se han omitido para asegurar compatibilidad con algunos > lectores de correo. > > > > -- > Forest Engineer > Master in Environmental and Natural Resource Economics > Ph.D. student in Sciences of Natural Resources at La Frontera University > Member in AguaDeTemu2030, citizen movement for Temuco with green city > standards for living > > Nota: Las tildes se han omitido para asegurar compatibilidad con algunos > lectores de correo. > > > [[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 >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Sebastian Kruk
2017-Aug-10 12:45 UTC
[R-es] unir varios archivos .csv en una serie historica
Hola Carlos. Probé instalar easycsv pero me dio errores:> install.packages("easycsv")installing the source package ?easycsv? probando la URL 'https://cloud.r-project.org/src/contrib/easycsv_1.0.2.tar.gz' Content type 'application/x-gzip' length 8551 bytes downloaded 8551 bytes * installing *source* package 'easycsv' ... ** package 'easycsv' successfully unpacked and MD5 sums checked Warning in file(file, if (append) "a" else "w") : cannot open file 'C:/Users/Sebastian/Documents/R/R-3.3.3/library/easycsv/DESCRIPTION': No such file or directory Error in file(file, if (append) "a" else "w") : no se puede abrir la conexión ERROR: installing package DESCRIPTION failed for package 'easycsv' * removing 'C:/Users/Sebastián/Documents/R/R-3.3.3/library/easycsv' The downloaded source packages are in ?C:\Users\Sebastián\AppData\Local\Temp\Rtmp0CrOmO\downloaded_packages? Warning messages: 1: comando ejecutado '"C:/Users/Sebastián/Documents/R/R-3.3.3/bin/x64/R" CMD INSTALL -l "C:\Users\Sebastián\Documents\R\R-3.3.3\library" C:\Users\SEBAST~2\AppData\Local\Temp\Rtmp0CrOmO/downloaded_packages/easycsv_1.0.2.tar.gz' tiene estatus 1 2: In install.packages("easycsv") : installation of package ?easycsv? had non-zero exit status Aparentemente el error está en que mi usuario es Sebastián y cuando busca mi carpeta personal pone Sebastian. ¿Cómo puedo solucionarlo? Saludos, Sebastián. Enviado desde Correo para Windows 10 De: Carlos Ortega Enviado: martes, 8 de agosto de 2017 17:59 Para: Sebastian Kruk CC: eric; Lista R Asunto: Re: [R-es] unir varios archivos .csv en una serie historica Hola, Para la próxima vez...: https://cloud.r-project.org/web/packages/easycsv/index.html Saludos, Carlos Ortega www.qualityexcellence.es El 8 de agosto de 2017, 15:04, Sebastian Kruk <residuo.solow en gmail.com> escribió: Hola Eric. Muchas gracias. Era exactamente lo que quería. Te agradezco mucho. Saludos, Sebastián. Enviado desde Correo para Windows 10 De: eric Enviado: martes, 8 de agosto de 2017 8:25 Para: Sebastian Kruk; Lista R Asunto: Re: [R-es] unir varios archivos .csv en una serie historica hola sebastian, invente 3 archivos con la estructura que describes y probe el codigo, le hice un par de arreglos necesarios, ahi va ... funciona bien con los archivos que te adjunto: # usando la libreria data.table library(data.table) setwd("/tu/directorio/con/los/datos/") filenames <- list.files(path = "/tu/directorio/con/los/datos/") # creas un data.table que contendra TODOS los datos de tus archivos datos <- data.table() # ciclo para leer cada archivo i<-1 for (i in 1:length(filenames)) { # 1. leer los datos de un unico archivo data <- data.table() data <- fread(filenames[i], header=TRUE) # 2. transformar la estructura del archivo de filas con hora y columnas con dias a ( columna con dia, columna con hora y columna con precio ) # primero usar stack() ... suponiendo que tu primera columna de datos es la hora del dia y tiene encabezado "horas" data.stacked <- data[,cbind(hora,stack(data, select=-hora))] data.stacked <- as.data.table(data.stacked) setnames(data.stacked,c("ind","values"),c("dia","precio")) # 3. agregar la columna con el nombre del mes data.stacked[, mes:=as.character(substr(filenames[i],1,3))] # 4. uniendo los datos datos <- rbind(datos,data.stacked) i <- i+1 } espero que te sirva, suerte !!!!!!!!!!! eric. On 08/08/2017 06:50 AM, Sebastian Kruk wrote: Hola Eric. Me diste una muy buena orientación. Para algunos años los archivos son de excel donde cada uno tiene 12 hojas, una hoja por mes. Cada hoja tiene el siguiente formato: Hora 1 2 3 4 ? 31 1 0 0 0 0 ? 23 2 0 0 0 24 ? 0 3 0 0 0 24,5 ? 21 4 0 0 0 26 ? 12 ????????? 24 0 0 0 0 ? 0 Por ejemplo en el día 1 el precio en las horas 1, 2, 3, 4 y 24 es 0, en cambio el día 31 el precio a la hora 1 es 23, a las 2 es 0, a las 3 es 21, a las 4 es 12 y a las 24 es 0. Espero no haberlos confundido más. Gracias, Sebastián. Enviado desde mi teléfono con Windows 10 De: eric Enviado: martes, 8 de agosto de 2017 6:52 Para: Sebastian Kruk; Lista R Asunto: Re: [R-es] unir varios archivos .csv en una serie historica Hola sebastian, sin el archivo de datos para probar y ver la estructura de los datos es un poco dificil, pero haciendo algunas suposiciones imagino que algo como esto te puede ayudar, seguro tendras que hacer ajustes: # usando la libreria data.table library(data.table) filenames <- list.files(path = "/tu/path") # creas un data.table que contendra TODOS los datos de tus archivos datos <- data.table() # ciclo para leer cada archivo i<-1 for (i in 1:length(filenames)) { # 0. crear un data.table para contener los datos de tu archivo de forma temporal dentro del ciclo data <- data.table() # 1. leer los datos de un unico archivo data <- as.data.table(fread(filenames[i], header=TRUE)) # 2. transformar la estructura del archivo de filas con hora y columnas con dias a ( columna con dia, columna con hora y columna con precio ) # primero usar stack() ... suponiendo que tu primera columna de datos es la hora del dia y tiene encabezado "horas" data.stacked <- data[,cbind(horas,stack(data, select=-horas))] data.stacked <- as.data.table(data.stacked) # 3. agregar la columna con el nombre del mes data.stacked[, mes:=as.character(substr(filenames[i],posiciondelPRIMERcaracterdelnombredelmes,posiciondelULTIMOcaracterdelnombredelmes))] # 4. uniendo los datos datos <- rbind(datos,data) i <- i+1 } Ojala te sirva, Suerte !!!!!!!!!!!! Eric. On 08/07/2017 06:17 PM, Sebastian Kruk wrote: Estimados usuarios-R: Muy buenas noches. Tengo una serie de archivos csv que contienen los precios mayoristas de electricidad por hora. Cada archivo csv corresponde a un mes de un cierto año. Cada columna corresponde a un día del mes y cada fila a una hora del día (1 a 24 horas). ¿Hay alguna forma rápida de importar todos los datos y formar un vector columna en que cada observación corresponde al precio que se dio en cierta hora en cierto dia en cierto mes en cierto año? Desde ya muchas gracias, Sebastián. [[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 -- Forest Engineer Master in Environmental and Natural Resource Economics Ph.D. student in Sciences of Natural Resources at La Frontera University Member in AguaDeTemu2030, citizen movement for Temuco with green city standards for living Nota: Las tildes se han omitido para asegurar compatibilidad con algunos lectores de correo. -- Forest Engineer Master in Environmental and Natural Resource Economics Ph.D. student in Sciences of Natural Resources at La Frontera University Member in AguaDeTemu2030, citizen movement for Temuco with green city standards for living Nota: Las tildes se han omitido para asegurar compatibilidad con algunos lectores de correo. [[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 -- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]