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.
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.
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 )
Vamos a unir los dos data frames formando un único objeto que contenga todas las variables, el procedimiento tiene dos pasos:
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.
Crear en nuevo objeto y grabar el fichero temperaturas.dat
con la función write.table
.
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 )
write.table( temp, "temperaturas.dat" )
write.table( "temperaturas.dat", sep = ";" , dec = ".")
# ?write.table
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)