[R-es] Eliminar filas al principio y final de un .csv en R

c.escalante.c c.escalante.c en gmail.com
Vie Jul 29 13:57:02 CEST 2016


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.strings=
c("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]]



Más información sobre la lista de distribución R-help-es