Message-ID: <CAOKbq8jeu+A144dc8Vbbg5VkWvbJ_96VNqSn+eeAOk-jPboMrg@mail.gmail.com>
Date: 2017-08-08T20:59:47Z
From: Carlos Ortega
Subject: [R-es] unir varios archivos .csv en una serie historica
In-Reply-To: <5989b686.c9331f0a.8b368.624a@mx.google.com>
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]]