c.escalante.c
2016-Jul-29 11:57 UTC
[R-es] Eliminar filas al principio y final de un .csv en R
Saludos, Joan. Dale una mirada a la biblioteca R llamada xlsconnect. César Escalante <div>-------- Mensaje original --------</div><div>De: r-help-es-request en r-project.org </div><div>Fecha:07/28/2016 3:41 PM (GMT-04:00) </div><div>A: r-help-es en r-project.org </div><div>Asunto: Resumen de R-help-es, Vol 89, Envío 36 </div><div> </div>Envíe los mensajes para la lista R-help-es a r-help-es en r-project.org Para subscribirse o anular su subscripción a través de la WEB https://stat.ethz.ch/mailman/listinfo/r-help-es O por correo electrónico, enviando un mensaje con el texto "help" en el asunto (subject) o en el cuerpo a: r-help-es-request en r-project.org Puede contactar con el responsable de la lista escribiendo a: r-help-es-owner en r-project.org Si responde a algún contenido de este mensaje, por favor, edite la linea del asunto (subject) para que el texto sea mas especifico que: "Re: Contents of R-help-es digest...". Además, por favor, incluya en la respuesta sólo aquellas partes del mensaje a las que está respondiendo. Asuntos del día: 1. Eliminar filas al principio y final de un .csv en R (Joan Giménez Verdugo) 2. Re: Eliminar filas al principio y final de un .csv en R (Carlos Ortega) 3. Re: Eliminar filas al principio y final de un .csv en R (Joan Giménez Verdugo) 4. Re: Eliminar filas al principio y final de un .csv en R (Carlos Ortega) 5. Re: Eliminar filas al principio y final de un .csv en R (Joan Giménez Verdugo) ---------------------------------------------------------------------- Message: 1 Date: Thu, 28 Jul 2016 13:53:55 +0200 From: Joan Giménez Verdugo <joan.gimenez en csic.es> To: r-help-es en r-project.org Subject: [R-es] Eliminar filas al principio y final de un .csv en R Message-ID: <CAA5N2CT2pOO7gf0sghSDjkdydtxy5Sm-yhrX2Vs7835SpJe4aQ en mail.gmail.com> Content-Type: text/plain; charset="UTF-8" Hola a todos, tengo 170 .csv donde tengo que eliminar las primeras 20 lineas (primer bloque) y luego todo un último bloque de datos (tercer bloque) que está separado por dos filas sin datos del segundo bloque (que es el que me interesa). El tercer bloque empieza en cada .csv en una linea diferente por lo tanto no se si puedo automatizar en R quedarme tan solo con la información a partir de la linea 21 y luego solo hasta la siguiente linea en blanco que es donde empieza el tercer bloque (que será diferente en cada .csv). Muchas gracias de antemano. Joan -- *Joan Giménez Verdugo* *PhD Student* *Severo Ochoa* Estación Biológica de Doñana (EBD-CSIC) Department of Conservation Biology Americo Vespucio Ave, s/n 41092 Sevilla (Spain) www.ebd.csic.es --- Research Gate: Joan Giménez <https://www.researchgate.net/profile/Joan_Gimenez2> Phone: +34 619 176 849 ü Please consider the environment before printing this E-mail [[alternative HTML version deleted]] ------------------------------ Message: 2 Date: Thu, 28 Jul 2016 17:00:34 +0200 From: Carlos Ortega <cof en qualityexcellence.es> To: Joan Giménez Verdugo <joan.gimenez en csic.es> Cc: Lista R <r-help-es en r-project.org> Subject: Re: [R-es] Eliminar filas al principio y final de un .csv en R Message-ID: <CAOKbq8iDw2Me2C+vd=S+yZvR5M0V1W=86=YoF0jK_CmSR5jpjw en mail.gmail.com> Content-Type: text/plain; charset="UTF-8" Hola, Se me ocurre esta solución en pseudo-código...: 1. Coges el primer fichero para procesar. 2. Con read.table indicas que salte esas primeras 20 líneas. Hay un parámetro que permite hacer esto (skip). 3. Cargas todo el fichero restante. 4. Identificas el data.frame donde están esas líneas en blanco que separan el segundo del tercer bloque. 5. Borras todo lo que está por debajo de esas líneas, quedándote ya con el bloque dos. 6. Guardo en un data.frame temporal el bloque dos. 7. Vuelvo al principio cogiendo otro fichero y aplicando la misma lógica y al llegar al punto 6 añado al data.frame temporal el nuevo segundo bloque. Si trabajas sobre Linux/Mac puedes hacer todo esto en una shell, con algo como "awk". Saltas las primeras 20 líneas en blanco, lees las líneas siguientes del fichero hasta que te encuentras una línea en blanco, donde paras el bucle y guardas en un fichero el bloque dos. Vuelves a iterar en el bucle y al encontrar nuevamente la línea en blanco, salvas (añadiendo) las líneas en el fichero anterior. Saludos, Carlos Ortega www.qualityexcellence.es El 28 de julio de 2016, 13:53, Joan Giménez Verdugo <joan.gimenez en csic.es> escribió:> Hola a todos, > > tengo 170 .csv donde tengo que eliminar las primeras 20 lineas (primer > bloque) y luego todo un último bloque de datos (tercer bloque) que está > separado por dos filas sin datos del segundo bloque (que es el que me > interesa). El tercer bloque empieza en cada .csv en una linea diferente por > lo tanto no se si puedo automatizar en R quedarme tan solo con la > información a partir de la linea 21 y luego solo hasta la siguiente linea > en blanco que es donde empieza el tercer bloque (que será diferente en cada > .csv). > > Muchas gracias de antemano. > > Joan > > -- > *Joan Giménez Verdugo* > *PhD Student* *Severo Ochoa* > Estación Biológica de Doñana (EBD-CSIC) > Department of Conservation Biology > Americo Vespucio Ave, s/n > 41092 Sevilla (Spain) > www.ebd.csic.es > --- > Research Gate: Joan Giménez > <https://www.researchgate.net/profile/Joan_Gimenez2> > Phone: +34 619 176 849 > ü Please consider the environment before printing this E-mail > > [[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]] ------------------------------ Message: 3 Date: Thu, 28 Jul 2016 18:07:11 +0200 From: Joan Giménez Verdugo <joan.gimenez en csic.es> To: Carlos Ortega <cof en qualityexcellence.es>, r-help-es en r-project.org Subject: Re: [R-es] Eliminar filas al principio y final de un .csv en R Message-ID: <CAA5N2CTbOD1SmoViOX1n8M_KDDX7tNg-UO=bT-dGTe3Ac1J3ow en mail.gmail.com> Content-Type: text/plain; charset="UTF-8" Muchas gracias Carlos, la lógica es perfecta pero no se como identificar con código las lineas en blanco entre el bloque 2 y el bloque 3. Para de esta forma quedarme solo con el bloque 2. Tienes alguna idea? Muchas gracias. Joan 2016-07-28 17:00 GMT+02:00 Carlos Ortega <cof en qualityexcellence.es>:> Hola, > > Se me ocurre esta solución en pseudo-código...: > > > 1. Coges el primer fichero para procesar. > 2. Con read.table indicas que salte esas primeras 20 líneas. Hay un > parámetro que permite hacer esto (skip). > 3. Cargas todo el fichero restante. > 4. Identificas el data.frame donde están esas líneas en blanco que > separan el segundo del tercer bloque. > 5. Borras todo lo que está por debajo de esas líneas, quedándote ya > con el bloque dos. > 6. Guardo en un data.frame temporal el bloque dos. > 7. Vuelvo al principio cogiendo otro fichero y aplicando la misma > lógica y al llegar al punto 6 añado al data.frame temporal el nuevo segundo > bloque. > > Si trabajas sobre Linux/Mac puedes hacer todo esto en una shell, con algo > como "awk". Saltas las primeras 20 líneas en blanco, lees las líneas > siguientes del fichero hasta que te encuentras una línea en blanco, donde > paras el bucle y guardas en un fichero el bloque dos. Vuelves a iterar en > el bucle y al encontrar nuevamente la línea en blanco, salvas (añadiendo) > las líneas en el fichero anterior. > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > > > El 28 de julio de 2016, 13:53, Joan Giménez Verdugo <joan.gimenez en csic.es> > escribió: > >> Hola a todos, >> >> tengo 170 .csv donde tengo que eliminar las primeras 20 lineas (primer >> bloque) y luego todo un último bloque de datos (tercer bloque) que está >> separado por dos filas sin datos del segundo bloque (que es el que me >> interesa). El tercer bloque empieza en cada .csv en una linea diferente >> por >> lo tanto no se si puedo automatizar en R quedarme tan solo con la >> información a partir de la linea 21 y luego solo hasta la siguiente linea >> en blanco que es donde empieza el tercer bloque (que será diferente en >> cada >> .csv). >> >> Muchas gracias de antemano. >> >> Joan >> >> -- >> *Joan Giménez Verdugo* >> *PhD Student* *Severo Ochoa* >> Estación Biológica de Doñana (EBD-CSIC) >> Department of Conservation Biology >> Americo Vespucio Ave, s/n >> 41092 Sevilla (Spain) >> www.ebd.csic.es >> --- >> Research Gate: Joan Giménez >> <https://www.researchgate.net/profile/Joan_Gimenez2> >> Phone: +34 619 176 849 >> ü Please consider the environment before printing this E-mail >> >> [[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 >-- *Joan Giménez Verdugo* *PhD Student* *Severo Ochoa* Estación Biológica de Doñana (EBD-CSIC) Department of Conservation Biology Americo Vespucio Ave, s/n 41092 Sevilla (Spain) www.ebd.csic.es --- Research Gate: Joan Giménez <https://www.researchgate.net/profile/Joan_Gimenez2> Phone: +34 619 176 849 ü Please consider the environment before printing this E-mail [[alternative HTML version deleted]] ------------------------------ Message: 4 Date: Thu, 28 Jul 2016 18:53:55 +0200 From: Carlos Ortega <cof en qualityexcellence.es> To: Joan Giménez Verdugo <joan.gimenez en csic.es> Cc: Lista R <r-help-es en r-project.org> Subject: Re: [R-es] Eliminar filas al principio y final de un .csv en R Message-ID: <CAOKbq8gNwBNjbCHRZ9QVWz3iGjYHmCxXHes9LVAQyqFmb9e2gQ en mail.gmail.com> Content-Type: text/plain; charset="UTF-8" Hola, Esta es una forma: #--------------------------- df <- data.frame( x = c(1:10, NA, NA, 11:20), y = c(letters[1:10], NA, NA, letters[11:20] ) ) df first_bad <- which(is.na(df), arr.ind = TRUE)[1,1] sub_df <- df[1:(first_bad - 1), ] #--------------------------- En este ejemplo, ya se parte de la eliminación de las 20 primeras líneas. Por tanto el bloque segundo, es el que aparece entre la primera línea y la primera línea en la que aparecen los NAs (fila 11). Detecto que la fila 11 es la que tiene los NAs (el resultado está en "first_bad"). Y teniendo esto, selecciono un subconjunto del "df" (donde estaba todo, bloque dos y el tres), entre la primera fila y "first_bad". Saludos, Carlos Ortega www.qualityexcellence.es El 28 de julio de 2016, 18:07, Joan Giménez Verdugo <joan.gimenez en csic.es> escribió:> Muchas gracias Carlos, > > la lógica es perfecta pero no se como identificar con código las lineas en > blanco entre el bloque 2 y el bloque 3. Para de esta forma quedarme solo > con el bloque 2. > > Tienes alguna idea? > > Muchas gracias. > > Joan > > 2016-07-28 17:00 GMT+02:00 Carlos Ortega <cof en qualityexcellence.es>: > >> Hola, >> >> Se me ocurre esta solución en pseudo-código...: >> >> >> 1. Coges el primer fichero para procesar. >> 2. Con read.table indicas que salte esas primeras 20 líneas. Hay un >> parámetro que permite hacer esto (skip). >> 3. Cargas todo el fichero restante. >> 4. Identificas el data.frame donde están esas líneas en blanco que >> separan el segundo del tercer bloque. >> 5. Borras todo lo que está por debajo de esas líneas, quedándote ya >> con el bloque dos. >> 6. Guardo en un data.frame temporal el bloque dos. >> 7. Vuelvo al principio cogiendo otro fichero y aplicando la misma >> lógica y al llegar al punto 6 añado al data.frame temporal el nuevo segundo >> bloque. >> >> Si trabajas sobre Linux/Mac puedes hacer todo esto en una shell, con algo >> como "awk". Saltas las primeras 20 líneas en blanco, lees las líneas >> siguientes del fichero hasta que te encuentras una línea en blanco, donde >> paras el bucle y guardas en un fichero el bloque dos. Vuelves a iterar en >> el bucle y al encontrar nuevamente la línea en blanco, salvas (añadiendo) >> las líneas en el fichero anterior. >> >> Saludos, >> Carlos Ortega >> www.qualityexcellence.es >> >> >> >> El 28 de julio de 2016, 13:53, Joan Giménez Verdugo <joan.gimenez en csic.es >> > escribió: >> >>> Hola a todos, >>> >>> tengo 170 .csv donde tengo que eliminar las primeras 20 lineas (primer >>> bloque) y luego todo un último bloque de datos (tercer bloque) que está >>> separado por dos filas sin datos del segundo bloque (que es el que me >>> interesa). El tercer bloque empieza en cada .csv en una linea diferente >>> por >>> lo tanto no se si puedo automatizar en R quedarme tan solo con la >>> información a partir de la linea 21 y luego solo hasta la siguiente linea >>> en blanco que es donde empieza el tercer bloque (que será diferente en >>> cada >>> .csv). >>> >>> Muchas gracias de antemano. >>> >>> Joan >>> >>> -- >>> *Joan Giménez Verdugo* >>> *PhD Student* *Severo Ochoa* >>> Estación Biológica de Doñana (EBD-CSIC) >>> Department of Conservation Biology >>> Americo Vespucio Ave, s/n >>> 41092 Sevilla (Spain) >>> www.ebd.csic.es >>> --- >>> Research Gate: Joan Giménez >>> <https://www.researchgate.net/profile/Joan_Gimenez2> >>> Phone: +34 619 176 849 >>> ü Please consider the environment before printing this E-mail >>> >>> [[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 >> > > > > -- > *Joan Giménez Verdugo* > *PhD Student* *Severo Ochoa* > Estación Biológica de Doñana (EBD-CSIC) > Department of Conservation Biology > Americo Vespucio Ave, s/n > 41092 Sevilla (Spain) > www.ebd.csic.es > --- > Research Gate: Joan Giménez > <https://www.researchgate.net/profile/Joan_Gimenez2> > Phone: +34 619 176 849 > ü Please consider the environment before printing this E-mail > > >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]] ------------------------------ Message: 5 Date: Thu, 28 Jul 2016 21:40:54 +0200 From: Joan Giménez Verdugo <joan.gimenez en csic.es> To: Carlos Ortega <cof en qualityexcellence.es> Cc: Lista R <r-help-es en r-project.org> Subject: Re: [R-es] Eliminar filas al principio y final de un .csv en R Message-ID: <CAA5N2CRNKU9jrvvpzBu-hQkf7uXZ2Tic4_8Ap+n7a2SD-2JTeA en mail.gmail.com> Content-Type: text/plain; charset="UTF-8" Muchas gracias Carlos. funciona de maravilla. He hecho un bucle y ya tengo todos mis dataframes listos en un momento. El bucle me ha quedado de la siguiente manera: #Cargar datos setwd("path") #hago una lista de todos los ficheros que quiero transformar csv<-list.files("path") #Bucle para hacerlo especie por especie for(i in 1:length(csv)) { print(i) # Me quito las primeras 24 lineas que no me interesan y relleno con NA el resto de huecos mydata <- read.table(file=paste("path",csv[i], sep=""), header=F, sep=",", skip=24,fill=T, na.stringsc("999", "NA", " ", "")) #encuentro donde está el primer NA first_bad <- which(is.na(mydata), arr.ind = TRUE)[1,1] #me quedo con los datos hasta el primer NA sub_df <- mydata[1:(first_bad - 1), ] #Guardo el csv nuevo write.table(sub_df, file =paste("path", csv[i], sep=""), sep = ",", na = "NA", dec = ".", col.names = F, row.names=F) } 2016-07-28 18:53 GMT+02:00 Carlos Ortega <cof en qualityexcellence.es>:> Hola, > > Esta es una forma: > > #--------------------------- > > df <- data.frame( > x = c(1:10, NA, NA, 11:20), > y = c(letters[1:10], NA, NA, letters[11:20] ) > ) > df > > first_bad <- which(is.na(df), arr.ind = TRUE)[1,1] > sub_df <- df[1:(first_bad - 1), ] > > #--------------------------- > > En este ejemplo, ya se parte de la eliminación de las 20 primeras líneas. > > Por tanto el bloque segundo, es el que aparece entre la primera línea y la > primera línea en la que aparecen los NAs (fila 11). Detecto que la fila 11 > es la que tiene los NAs (el resultado está en "first_bad"). Y teniendo > esto, selecciono un subconjunto del "df" (donde estaba todo, bloque dos y > el tres), entre la primera fila y "first_bad". > > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > El 28 de julio de 2016, 18:07, Joan Giménez Verdugo <joan.gimenez en csic.es> > escribió: > >> Muchas gracias Carlos, >> >> la lógica es perfecta pero no se como identificar con código las lineas >> en blanco entre el bloque 2 y el bloque 3. Para de esta forma quedarme solo >> con el bloque 2. >> >> Tienes alguna idea? >> >> Muchas gracias. >> >> Joan >> >> 2016-07-28 17:00 GMT+02:00 Carlos Ortega <cof en qualityexcellence.es>: >> >>> Hola, >>> >>> Se me ocurre esta solución en pseudo-código...: >>> >>> >>> 1. Coges el primer fichero para procesar. >>> 2. Con read.table indicas que salte esas primeras 20 líneas. Hay un >>> parámetro que permite hacer esto (skip). >>> 3. Cargas todo el fichero restante. >>> 4. Identificas el data.frame donde están esas líneas en blanco que >>> separan el segundo del tercer bloque. >>> 5. Borras todo lo que está por debajo de esas líneas, quedándote ya >>> con el bloque dos. >>> 6. Guardo en un data.frame temporal el bloque dos. >>> 7. Vuelvo al principio cogiendo otro fichero y aplicando la misma >>> lógica y al llegar al punto 6 añado al data.frame temporal el nuevo segundo >>> bloque. >>> >>> Si trabajas sobre Linux/Mac puedes hacer todo esto en una shell, con >>> algo como "awk". Saltas las primeras 20 líneas en blanco, lees las líneas >>> siguientes del fichero hasta que te encuentras una línea en blanco, donde >>> paras el bucle y guardas en un fichero el bloque dos. Vuelves a iterar en >>> el bucle y al encontrar nuevamente la línea en blanco, salvas (añadiendo) >>> las líneas en el fichero anterior. >>> >>> Saludos, >>> Carlos Ortega >>> www.qualityexcellence.es >>> >>> >>> >>> El 28 de julio de 2016, 13:53, Joan Giménez Verdugo < >>> joan.gimenez en csic.es> escribió: >>> >>>> Hola a todos, >>>> >>>> tengo 170 .csv donde tengo que eliminar las primeras 20 lineas (primer >>>> bloque) y luego todo un último bloque de datos (tercer bloque) que está >>>> separado por dos filas sin datos del segundo bloque (que es el que me >>>> interesa). El tercer bloque empieza en cada .csv en una linea diferente >>>> por >>>> lo tanto no se si puedo automatizar en R quedarme tan solo con la >>>> información a partir de la linea 21 y luego solo hasta la siguiente >>>> linea >>>> en blanco que es donde empieza el tercer bloque (que será diferente en >>>> cada >>>> .csv). >>>> >>>> Muchas gracias de antemano. >>>> >>>> Joan >>>> >>>> -- >>>> *Joan Giménez Verdugo* >>>> *PhD Student* *Severo Ochoa* >>>> Estación Biológica de Doñana (EBD-CSIC) >>>> Department of Conservation Biology >>>> Americo Vespucio Ave, s/n >>>> 41092 Sevilla (Spain) >>>> www.ebd.csic.es >>>> --- >>>> Research Gate: Joan Giménez >>>> <https://www.researchgate.net/profile/Joan_Gimenez2> >>>> Phone: +34 619 176 849 >>>> ü Please consider the environment before printing this E-mail >>>> >>>> [[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 >>> >> >> >> >> -- >> *Joan Giménez Verdugo* >> *PhD Student* *Severo Ochoa* >> Estación Biológica de Doñana (EBD-CSIC) >> Department of Conservation Biology >> Americo Vespucio Ave, s/n >> 41092 Sevilla (Spain) >> www.ebd.csic.es >> --- >> Research Gate: Joan Giménez >> <https://www.researchgate.net/profile/Joan_Gimenez2> >> Phone: +34 619 176 849 >> ü Please consider the environment before printing this E-mail >> >> >> > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es >-- *Joan Giménez Verdugo* *PhD Student* *Severo Ochoa* Estación Biológica de Doñana (EBD-CSIC) Department of Conservation Biology Americo Vespucio Ave, s/n 41092 Sevilla (Spain) www.ebd.csic.es --- Research Gate: Joan Giménez <https://www.researchgate.net/profile/Joan_Gimenez2> Phone: +34 619 176 849 ü Please consider the environment before printing this E-mail [[alternative HTML version deleted]] ------------------------------ Subject: Pié de página del digest _______________________________________________ R-help-es mailing list R-help-es en r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es ------------------------------ Fin de Resumen de R-help-es, Vol 89, Envío 36 ********************************************* [[alternative HTML version deleted]]