Leemos los datos

Vamos a utilizar los datos de la estación meteorológica de la UMU, disponibles en el enlace: https://estacion.um.es/estacion/servlet/estacion.TempAmb

En este aparecen los datos de temperatura máxima y mínima para dos meses, en dos bloque separados, uno por cada medida. Nuesto objetivo es crear un fichero que contenga tres variables: día de la medida, temperatura máxima y temperatura mínima.

Comenzaremos leyendo los ficheros de datos por separado, uniremos las medidas del mismo día y crearemos un conjunto de datos con las columnas que nos interesen.

Temperatura mínima

Leemos los datos del fichero con los datos de temperatura mínima

tminl <- read.table( "tMinL.dat", sep = "" , dec = ",")

Comprobamos la estructura del fichero

str( tminl )
## 'data.frame':    59 obs. of  3 variables:
##  $ V1: int  1 2 3 4 5 6 7 8 9 10 ...
##  $ V2: num  7.9 7.7 10 8.2 12.8 8.1 8.4 10.6 8.7 7.9 ...
##  $ V3: Factor w/ 59 levels "01/02/2016","01/03/2016",..: 14 12 10 8 6 4 2 57 55 53 ...

Le ponemos nombres representativos a las variables

names( tminl ) <- c("n", "tMin", "fecha")
head( tminl )

Vemos que la variable fecha la considera un factor, la ponemos en el formato correcto.

# library( lubridate )
tminl$fecha <- dmy(tminl$fecha) #Formato de fecha.

Temperatura máxima

Repetimos el mismo proceso para los datos de temperatura máxima.

tmaxl <- read.table( "tMaxL.dat", sep = "" , dec = "," )
str( tmaxl )
## 'data.frame':    59 obs. of  3 variables:
##  $ V1: int  1 2 3 4 5 6 7 8 9 10 ...
##  $ V2: num  13.1 17 18.3 23.5 22.6 26 20.8 16.8 15.3 14.3 ...
##  $ V3: Factor w/ 59 levels "01/02/2016","01/03/2016",..: 14 12 10 8 6 4 2 57 55 53 ...
tmaxl <- rename( tmaxl, n = V1, tMax = V2, fecha = V3 )
tmaxl$fecha <- dmy(tmaxl$fecha) 
head( tmaxl )

Creación del fichero con todos los datos

Vamos a unir los dos data frames formando un único objeto que contenga todas las variables, el procedimiento tiene dos pasos:

  1. Comprobar que el orden de los datos es el mismo en los dos casos; debemos evitar que una de las dos series tenga más o menos datos o que no se correspondan en fecha.

  2. Crear en nuevo objeto y grabar el fichero temperaturas.dat con la función write.table.

Comprobar la compatibilidad de los ficheros

Utilizaremos la variable que contiene la fecha, pues es la única común en conjuntos de datos.

Como ya le hemos dicho a R que se tratan de objetos tipo date, va a ser muy fácil compararlos. Para ver si se trata del mismo día lo que hacemos es rectar las fechas.

tminl$fecha - tmaxl$fecha
## Time differences in days
##  [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [36] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Como todas las diferencias son 0, esto significa que se trata de los mismo días y por tanto podemos juntar los ficheros sin problema.

temp <- bind_cols( tminl, tmaxl )

Como las variables tenían el mismo nombre, la función automáticamente le añade un 1 detrás. ¿Sería correcto dejar el conjunto de datos así? No queremos tener variables repetidas.

temp <- temp %>% 
         select( n, tMin, tMax, fecha ) 

glimpse( temp )
## Observations: 59
## Variables: 4
## $ n     <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1...
## $ tMin  <dbl> 7.9, 7.7, 10.0, 8.2, 12.8, 8.1, 8.4, 10.6, 8.7, 7.9, 7.1...
## $ tMax  <dbl> 13.1, 17.0, 18.3, 23.5, 22.6, 26.0, 20.8, 16.8, 15.3, 14...
## $ fecha <date> 2016-03-07, 2016-03-06, 2016-03-05, 2016-03-04, 2016-03...

Otra opción: crear directamente iun data.frame con las variables que queremos

temp2 <- data.frame( tminl$tMin, tmaxl$tMax, tmaxl$fecha)
head( temp, 15 )

Exportamos el fichero con la función write.table.

write.table( temp, "temperaturas.dat" )
write.table( "temperaturas.dat", sep = ";" , dec = ".")
# ?write.table

Descripción y manipulación del fichero

Una vez tenemos el conjunto de datos preparado, podemos manipularlo y explorarlo.

Vamos a crear una variable que sea la diferencia de temperaturas de cada día y ordenar los datos según esa diferencia. Seleccionamos entonces aquellos días para los que la diferencia es mayor de 13ºC.

temp %>% 
   mutate( difTemp = tMax - tMin ) %>% 
    arrange( difTemp) %>% 
    filter( difTemp > 13)