# Luego descargamos a partir del link de descargalink <-"https://gml.noaa.gov/webdata/ccgg/trends/co2/co2_annmean_mlo.txt"download.file(url = link, destfile ="mauna.csv")# Importamos los datos del csvdatos1 <-read.table(file ="mauna.csv")names(datos1) <-c("year","meanCO","UC")head(datos1)
# Guardamos la nueva tabla de datoswrite.table(x = datos1, file ="mauna2.csv",sep =",")
2 Operadores y relaciones en R
#operador de asignaciónassign("b",c(5,6,5))
2.1 Instrucción “if”
Nos permite ejecutar un bloque de código si se cumple una condición.
x <-10if (x>5) {print("Operación exitosa")print("el número es mayor que 5")}
[1] "Operación exitosa"
[1] "el número es mayor que 5"
2.2 Instrucción “else”
Nos permite ejecutar un código cuando no se cumple la condición evaluada por la instrucción “if”.
x <-4if (x>5) {print("Operación exitosa")print("el número es mayor que 5")} else {print("Operación incorrecta")print("El número es menor o igual a 5")}
[1] "Operación incorrecta"
[1] "El número es menor o igual a 5"
2.3 Instrucción “else if”
Esta instrucción nos permite ejecutar un bloque de código cuando no se cumple con la condición evaluada por la instrucción “if” y se necesite más de una instrucción.
x <-6if (x>6) {print("Operación exitosa")print("el número es mayor que 5")} elseif (x==5){print("La operación no se realizó")print("El número es igual a 5")} elseif (x==6){print("La operación no se realizó")print("El número es igual a 6")} else {print("Operación incorrecta")print("El número es menor o igual a 5")}
[1] "La operación no se realizó"
[1] "El número es igual a 6"
2.4 Instrucción “if else”
Nos permite evaluar de manera rápida si contamos con solo una instrucción para “if” y una instrucción para “else”.
x <-5ifelse(x>5, "El número es mayor que 5","El número es menor o igual que 5")
[1] "El número es menor o igual que 5"
2.5 Instrucción “for”
Es una manera de repetir alguna función o líneas de código mientras se cumple determinadas condiciones. Es útil para repetir un procedimiento una cierta cantidad de veces.
x <-c(20, 15, 17, 18, 20, 25, 26, 29)# Creamos un vector vacíovector <-c()for (i in1:length(x)) { z <- x[i]*2 vector[i] <- z+iprint(paste("El número es:",vector[i]))}
[1] "El número es: 41"
[1] "El número es: 32"
[1] "El número es: 37"
[1] "El número es: 40"
[1] "El número es: 45"
[1] "El número es: 56"
[1] "El número es: 59"
[1] "El número es: 66"
print(paste("El número es:", vector, sep =" "))
[1] "El número es: 41" "El número es: 32" "El número es: 37" "El número es: 40"
[5] "El número es: 45" "El número es: 56" "El número es: 59" "El número es: 66"
2.6 Instrucción “while”
Es muy útil para repetir un procedimiento siempre que se cumple una condición.
[1] "El número 1 Es impar"
[1] "El número 2 Es par"
[1] "El número 3 Es impar"
[1] "El número 4 Es par"
[1] "El número 5 Es impar"
[1] "El número 6 Es par"
3 Horarios y fechas
3.0.1 as.Date( )
Sirve para cohercionar elementos de tipo caracter a valores de tipo “date ()”.
# Creamos un objeto se tipo date:end_year <-as.Date(x ="31/12/2022",format="%d/%m/%Y")print(paste("La fecha: ", end_year, " es de tipo ", class(end_year)))
[1] "La fecha: 2022-12-31 es de tipo Date"
# Si se suma un valor númerico, la clase date lo considera como un día más.print(paste("El día siguiente al final de este año es: ", end_year+1))
[1] "El día siguiente al final de este año es: 2023-01-01"
3.0.2 format ( )
new_year <-format(x = end_year+1,format="%A, %d de %B del %Y")print(new_year) # es de tipo caracter
[1] "domingo, 01 de Enero del 2023"
3.1 Secuencias con horarios y fechas
# Creamos una secuencia de fechasseq(as.Date(x="01-12-2022",format="%d-%m-%Y"),as.Date(x="08-12-2022",format="%d-%m-%Y"),by="1 day") # day, week, month, etc.
# Creamos un objeto POSIXctas.POSIXct("01-12-2022",format="%d-%m-%Y")
[1] "2022-12-01 -05"
# POSIXct con hora, minuto y segundos:as.POSIXct("01-12-2022 08:00:00", format="%d-%m-%Y %H:%M:%S",tz ="UTC")
[1] "2022-12-01 08:00:00 UTC"
# La fecha actual:as.POSIXct(Sys.time())
[1] "2023-01-05 19:16:47 -05"
Ejercicio aplicativo 2
Cargar la base de datos del senamhi y realizar transformaciones en las fechas, creando columnas convenientes:
# Cargamos la base de datos:ta <-read.table(file ="qc00000877.txt",header = F,dec=".",stringsAsFactors = F,na.strings ="-99.9")names(ta) <-c("año","mes","dia","pp","tmax","tmin")# creamos la columna de fecha:# Fechas diarias:ta$date <-as.POSIXct(x=paste(ta$año,ta$mes,ta$dia, sep ="-"),format="%Y-%m-%d")# Fechas mensuales:ta$mensual <-format(ta$date, format ="%Y-%m")# Resúmenes de variables:p_mensual <-aggregate(pp~mensual, data = ta,FUN = sum)tmax_mensual <-aggregate(tmax~mensual, data = ta,FUN = mean)tprom_mensual <-aggregate(x=((ta$tmax+ta$tmin)/2)~mensual,data = ta, FUN = mean)
Ejercicio aplicativo 3
Importar la base de datos de promedios mensuales de mauna loa y resolver lo siguiente:
Se realizará la descarga de datos de la estación meteorológica automática de “TACNA”
library(RSelenium)download_senamhi_data <-function(url_list) { port <-as.integer(runif(1, min =5000, max =6000))# EJECUTAMOS EL DRIVER DE GOOGLE CHROME rD <-rsDriver(port = port, browser ="chrome", chromever ="108.0.5359.71") remDrv <- rD$clientfor (url in url_list){# INGRESAR AL URL remDrv$navigate(url)# ENCONTRAR EL BOTON DE DESCARGA down_button <- remDrv$findElement(using ="id", "export2") down_button$clickElement() }# CERRAR LA SESION ACTUAL remDrv$close() rD$server$stop()rm(rD, remDrv)gc()}# Geneerando las urlsaños <-rep(2017:2022,12)meses <- mes <-sort(sprintf("%02d",rep(1:12,5)))fechas <-sort(paste0(años,meses))[]# Generando los linksEstacion_meses <-list()for (i in fechas) { Estacion_meses[i] <-paste0("https://www.senamhi.gob.pe/mapas/mapa-estaciones-2/_dato_esta_tipo02.php?CBOFiltro=",i,"&estaciones=118014&t_e=M&estado=AUTOMATICA&cod_old=&cate_esta=EMA&soloAlt=498")}# download_senamhi_data(Estacion_meses)
4.1 Carga de los datos descargados por descarga automática
directorio <-"C:/Users/bryan/Downloads"# Guardado de los nombres de archivosmyfiles <-list.files(path=directorio, pattern="*.csv", full.names=TRUE)tablas <-list()for (i in1:length(myfiles)) { tablas[[i]] <-read.table(myfiles[i], sep =",", header = T ,skip =10 , stringsAsFactors = F, na.strings ="S/D")}# CONCATENAR LOS DATAFRAMES DE LA LISTAdf <-Reduce(function(...) merge(... , all=TRUE), tablas)library(openxlsx)write.xlsx(x=df, file ="Estación_tacna.xlsx")tail(df)
4.2 Tratamiento de datos meteorológicos usando funciones de R
# Carga de la tabla de datos compilada:data <-read.xlsx("Estación_tacna.xlsx")names(data) <-c("date","hora","temp","pp","hum","wd","ws")data$date2 <-as.POSIXct(x=(paste(data$date, data$hora,sep =" ")),format="%Y/%m/%d %H:%M")data$date <- data$date2data$date2 <-NULLwindRose(data, paddle = F, type ="season",hemisphere="southern")