Sei sulla pagina 1di 25

Manual del curso Introductorio de R

Mencin:
Sistemas de Informacin Geogrfica

Instructor:
Ing. Gabriel Mantilla Saltos

Organizador:
Ms.C. Gina Andrade

Periodo
27 de Octubre 24 Noviembre 2017
Contenido
Resumen ........................................................................................................................................ 1
Introduccin .................................................................................................................................. 1
Entorno de trabajo ......................................................................................................................... 2
Descarga e Instalacin de libreras. ............................................................................................... 4
Programando en R ......................................................................................................................... 4
Creacin de vectores, matrices, dataframes, listas y arreglos multidimensionales. ...................... 6
Funciones trigonomtricas .......................................................................................................... 10
Grficos plot, pie, boxplot, barplot, hist ...................................................................................... 12
Funciones de agregacin, apply, sapply, tapply, mapply, ddply, aaply. ..................................... 13
Como crear Funciones................................................................................................................. 16
Sistemas de Informacin Geogrfica .......................................................................................... 19
Resumen
La implementacin de softwares de acceso libre en la investigacin ha tenido
un crecimiento exponencial en los ltimos 5 aos, desarrolladores comparten
su opinin en foros, tutoriales, videos prcticos en la web, permitiendo
desarrollar el software de un modo acadmico profesional siendo esta su
principal ventaja frente a su competidor potencial Python. R es un software
de comando no orientado a objetos, que esta principalmente implementando
en el anlisis estadstico, ha tenido cabida en la ciencia de los datos como la
Minera de datos, Inteligencia de Negocios, Pronsticos, Machine Learning,
Geoestadstica, Scoring de Crdito, Supervivencia, Sistemas de
Recomendacin, Investigacin Biomdica, Bioinformtica, etc. Si de
programacin nos referimos, R es un lenguaje ms divertido, verstil,
flexible para desarrolladores que dedican poco tiempo en aprenderlo a
diferencia de Matlab. La curva de aprendizaje de R a diferencia con otros
softwares de datos (Excel, SPSS, Minitab, SAS, Estadstica) es mucho ms
lenta, debido al tiempo que se invierte en acostumbrarse al software, a
reconocer errores, entender su lgica de programacin y conocer la
funcionalidad de las libreras que existen, por otro lado estos otros softwares
de datos son mucho ms fciles de implementar por sus botones predefinidos
para un tipo de anlisis especifico, su desventaja es que son limitados, donde
el desarrollador no puede profundizar, manipular incluso mejorar estas
funciones que terminan al final siendo desconocidas y difciles de
referencias.

Introduccin
R fue desarrollado por Ross Ihaka y Robert Gentleman del departamento de
estadstica de la universidad de Auckland en 1992, no obstante, si se remonta
ms hacia el pasado el software se deriva del lenguaje S, desarrollado en los
laboratorios de Bell y AT&T y ahora Alcatel en Nueva Jersey a finales de
1970, por los desarrolladores John Chambers, Rick Becker y colaboradores.
Los desarrolladores iniciales Ihaka y Gentleman combinaron fortalezas de S
y Scheme para luego con esta idea mejorar su lgica de programacin,
hacindolo un software ms funcional que ahora es conocido como R. Al
momento de trabajar, el usuario prefiere el entorno grafico de Rstudio,
siendo este si interfaz grfica, un entorno de desarrollo integrado IDE en R,
libre y de cdigo abierto, fue fundado por Joseph J. Allaire y lanzado en
febrero de 2011. Rstudio cuenta con rea de trabajo ms amigable, con
mens desplegables, rea de grficos, variables y scripts distribuidos en 4
partes de la pantalla, donde el usuario puede visualizar las salidas en una
misma ventana.

1
Entorno de trabajo
Procedemos a buscar el programa Rstudio en la ventana de bsqueda de Windows

Rstudio, o en el escritorio, no abrir R solo Rstudio y lo ejecutamos. A continuacin, se

puede observar el ambiente de trabajo del software del Rstudio.

Para entender los iconos de acceso rpido del Rstudio, la carpeta sirve para abrir un script

que este guardado en alguna carpeta que conozcamos, el diskette sirve para guardar

nuestro trabajo segn una ruta especifica. Los dos diskettes son para guardar y actualizar

nuestros scripts.

La hoja en blanco con un ms verde es para crear un nuevo tipo de archivo en los que se

programaran nuestros trabajos.

2
A continuacin, mostraremos los comandos con los que iremos trabajando a lo largo del

curso.

Primero tenemos que crear un nuevo script, que es el botn R Script que vemos en la

figura, y lo vamos a guardar en alguna carpeta de preferencia nuestra.

As podemos tener nuestro trabajo guardado, en un archivo de texto plano con formato

Archivo R, que luego en otro momento al ejecutarlo podremos volver a usar de nuestros

cdigos, editarlo, actualizarlo etc.

En ese script crearemos ejemplos, de los trabajos que da a da iremos modificando,

teniendo un registro fsico de nuestro anlisis, tambin podemos guardar en bases de datos

de extensin rda, que nos facilitara el uso de datos al momento de abrir el software, mas

no un archivo de Excel o un archivo de texto .txt, que tienen limitaciones de hablamos en

ms de una dimensin. El aprendizaje se base en conocer los comandos de las funciones

que se encuentran dentro de las libreras que iremos a implementar, con el tiempo

3
conoceremos los parmetros de estas funciones, y tendremos experiencia en cmo se

aplica ese mtodo. Las comillas dobles nos sirven para buscar archivos que se encuentre

dentro de una carpeta por el backslash /, para poder abrir un ejecutable es necesario usar

doble backslash //.

Descarga e Instalacin de libreras.


En la parte derecha inferior de la pantalla, en la pestaa Packages, es donde podemos

instalar las libreras que tienen las funciones que utilizamos en nuestros anlisis,

escribimos la librera, y automticamente el R lo instala si tenemos internet en la

computadora.

Una vez instalada la librera, procedemos a llamarla, existen dos formas.

1.- Es escribir library(ggplot2) en la consola y se ejecuta esta lnea con los siguientes

comandos (Ctrl+Enter).

2.- Es llamndola de la pestaa packages de la parte inferior derecha de la pantalla.

Programando en R

El trabajo del usuario que recin est estudiando como trabajar en R, es investigar

ejemplos en internet, en la web se encuentra innumerables repositorios con ejemplos de

las tcnicas estadsticas. Lo primero es reconocer que R no es un software orientado a

4
objetos, es decir que no podremos crear objetos que tengan alguna propiedad o

funcionalidad que ms luego la podremos usar, eso hace mucho ms fcil la

programacin, aqu los objetos ya estn predefinidos, ejemplo si queremos crear una

variable, no es necesario primero definir las propiedades de ella o qu tipo de variables

es (int(50) variable) como se lo hace en C++. Basta con escribir variable=5, el R reconoce

que la variable es de tipo numrica, variable="gabriel", R reconoce que es un variable de

tipo carcter o factor. Pero si la definimos as, variable=5, el R reconoce que es una

palabra porque est dentro de comillas dobles. Para limpiar la pantalla podemos ejecutar

la combinacin de teclas Ctrl+L, para ejecutar una lnea de comando Ctrl+Enter o tambin

haciendo clic en el botn posterior derecho del script.

Para buscar alguna palabra o letra en las lneas de codificacin ejecutamos Ctrl+F, donde

nos aparecer las celdas de bsqueda, o basta con hacer clic en la lupa.

Tambin podemos minimizar y maximizar las ventanas dando clic en los siguientes

botones en la parte superior derecha de cada uno.

Para poner comentarios utilizamos el carcter #

#un valor vaco que no existe fsicamente se lo reconoce como NA o NaN

NA

NaN

5
#para salir de r la orden en consola es q() y luego si o no (y/n) para guardar

q()

Creacin de vectores, matrices, dataframes, listas y arreglos


multidimensionales.
#para crear un valor utilizamos la letra c(x)

c(5)

#para agregar ms valores, se convierte en un vector de 5 valores separados por comas

c(2,8,4,3,10)

#para crear un vector con palabras, los ponemos dentro de las

c("maria","jose","yayo","luis")

#los podemos guardar en una variable con cualquier nombre

julanito=c(1,3,6,2,3,6,7)#se visualiza en el sector de variables como numrica

#para conocer la estructura de una variable str(x)

str(julanito)

#para crear un vector rellenado por filas rbidn(x)

rbind(4,5,6,2,3)

#para crear un vector rellenado por columnas cbidn(x)

cbind(5,7,6,8,4,1,2,3)

#para crear una secuencia de nmeros en pasos de uno, utilizo los dos puntos :

1:10

#para crear una secuencia de nmeros en pasos personalizados, seq()

seq(1,100,0.5)

#para replicar un nmero, vector, objeto un nmero determinado de veces

rep(1,10)#repite el 1, 10 veces

#para concatenar palabras caracteres o palabras

6
paste("hola","como","estas",sep=" ")

#paste("a", "b", sep="") = paste0("a", "b") son la misma funcin

#para crear un matriz utilizamos la funcin matrix(n,ncol,mcol)

matrix(1:20,nrow=5,ncol=4) #una matriz de 5 filas y 4 columnas

#para crear una matriz y empiece a rellenar los datos por filas

matrix(1:20,4,5,byrow=TRUE) #una matriz de 4 filas y 5 columnas

#para crear un data.frame, data.frame(variables)

trabajadores=data.frame(Contabilidad=c("mario","juan","marcos","eli"),sueldo=c(365,3

65,380,150),id=rep(12,4))

#para llamar a las variables de un data.frame utilizamos el $

trabajadores$Contabilidad

#para agregar una nueva variable al data frame creado

trabajadores$Edad=c(35,38,41,39)

#para crear una lista, list(objetos)

colegio=list(Alumnos=c("Maria","juan","pepe","juan","pepe","pepe","pepe"),Notas=c(2

,2,2,1,1,3,3,3,3,4,5,6,7,5,9,7,8,2,11,12,13,14,15,10,9))

clima=list(Temperatura=data.frame(minima=runif(100,20,25),maxima=runif(100,25,30

)), precipitacion=data.frame(RR=runif(100,20,30)))

#para llamar a los objetos dentro de una lista utilizamos el smbolo $

clima$Temperatura$minima

#otra forma de llamar a las variables es utilizando doble corchete

colegio[[1]]

#para darle nombres a las variables de una matriz, names(matrix)

KO=matrix(0,5,5)

names(KO)=c("V1","V2","V3","V4","V5")

7
#para crear un arreglo multidimensional

vec=array(1:60,dim=c(3,4,5))

#la funcin rm() me sirve para borrar una variable

rm(colegio)

#la funcin colorRampPalette(colores)(nmero de colores) me sirve para generar una

paleta de colores #segn el cdigo de los colores, y cuantos quiero generar

colorRampPalette(c("#ff8080","#80ffff"))(12)

#para redondear un decimal, round(x,n)

round(1.45724,1)

#para redondear segn criterio de significancia, signif(x, digits = 6))

signif(0.1236, 3)

#para obtener el entero mayor, ceiling(x)

ceiling(1.1)

#para sacar el entero ms negativo, floor(x)

floor(-3.2)

#para sacar el entero ms positivo, trunc(x)

trunc(-3.2)

#para resolver un sistema de ecuaciones 3x3

A=matrix(data=c(1, 2, 3, 2, 5, 9, 5, 7, 8), nrow=3, ncol=3, byrow=TRUE)

B=c(20, 100, 200)

round(solve(A, B), 3)#solve es una funcin resuelve el sistema

#tambin podemos multiplicar la matriz inversa por el vector de resultados

solve(A)%*%B#solve saca la inversa de una matriz cuadrada

#para multiplicar matricialmente, %*%

A%*%B

8
#para obtener los valores de la diagonal de una matriz cuadrada, diag(x)

diag(A)

#para sacar el determinante de una matriz cuadrada

det(A)

#para sacar los valores y vectores propios de una matriz cuadrada

eigen(A)

#para sacar la transpuesta de una matriz, t(x)

t(A)

#para sacar promedios, mean(x)

mean(runif(20,0,10))

#para sacar el mnimo, min(x)

min(1:10)

#para sacar el mximo, min(x)

max(20:50)

#para calcular la suma, sum(x)

sum(20:35)

#para sacara la suma acumulada, cumsum(x)

cumsum(10:20)

#para sacar percentiles, cuartiles, deciles, etc., quantile(x,vector)

quantile(0:100,c(0.25,0.5,0.75))

#para sacar la varianza, var(x)

var(runif(100,0,50))

#para sacar la desviacin estndar, sd(x)

sd(runif(100,0,50))

#para sacar la raz cuadrada

9
sqrt(64)

#para lacar el logaritmo de un nmero, log10(100)

log10(100)

#para sacar el logaritmo natural de un nmero, log(x)

log(10)

Funciones trigonomtricas
sin(3*pi) #funcin seno, sin(x)

cos(5*pi) #funcin coseno, cos(x)

tan(6*pi) #funcin tangente, tan(x)

acos(3*pi) #funcin arco coseno, acos(x)

asin(2*pi) #funcin arco seno, asin(x)

atan(7*pi) #funcin arco tangente, atan(x)

atan2(8*pi,5*pi) #funcin arco cotangente, atan2(x)

cosh(x) #funcin coseno hiperblico, cosh(x)

sinh(x) #funcin seno hiperblico, sinh(x)

tanh(x) #funcin tangente hiperblico, tanh(x)

acosh(x) #funcin arco coseno hiperblico, acosh(x)

asinh(x) #funcin arco seno hiperblico, asinh(x)

atanh(x) #funcin arco tangente hiperblico, atanh(x)

#para el clculo de la funcin exponencial, exp(x)

exp(50)

#para el clculo de un numero factorial, factorial(x)

factorial(3)

#para calcular una tabla de frecuencia, table(x)

table(c("maria","maria","jose","pepe","pepe","diana","diana","diana"))

10
#para abrir bases en R, con la funcin data

data("airquality")

#para divivir en intervalos de la data

cut(airquality$Temp,3)

#para conocer la frecuencia segn esos intervalos

table(cut(airquality$Temp, 9))

#funcin para guardar en un archivo fsico los datos aqu en R

base=data.frame(notas=1:5)

write.table(base,"archivooo.txt",row.names = F,col.names = T)

Generacin de nmeros aleatorios.

#para generar nmeros aleatorios de una distribucin uniforme runif(n,min,max)

runif(20,0,10)#20 nmeros aleatorios de 0 a 10

#para generar nmeros aleatorios de un distribucin normal rnorm(n,mean, sd)

rnorm(20,30,5)#20 nmeros aleatorios con media 30 y desviacin estndar 5

#para generar nmeros aleatorios de una distribucin binomial rbinom(n,size,prob)

rbinom(20,5,0.5)#20 nmeros aleatorios, 5 nmeros de xitos de 20 experimentos,

probabilidad 0.5

#para generar nmeros aleatorios de una distribucin beta, rbeta(n,shape1, shape2, ncp

= 0)

rbeta(20,5,4)#20 nmeros aleatorios con alpha=5 y beta=4 (parmetros)

#para generar nmeros aleatorios de una distribucin exponencial, rexpo(n,rate=1)

rexpo(20,5)#20 nmeros aleatorios con lambda igual a 5

#para generar nmeros aleatorios de una distribucin binomial negativa, rnbinom(n,

size, prob, mu)

rnbinom(20,5,0.7)#20 nmeros aleatorios del 5-esimo xito, con probabilidad 0.7

11
#para generar nmeros aleatorios de una distribucin multinomial, rmultinom(n, size,

prob)

rmultinom(20,5,c(0.1,0.7))#20 nmeros aleatorios, 5 categoras, con un vector de

probabilidad 0.1 y 0.7

#para generar nmeros aleatorios de una distribucin gamma, rgamma(n, shape, rate =

1, scale = 1/rate)

rgamma(20,1,2)#20 nmeros aleatorios con k=1 y lamda=2, beta=1/lambda

#para generar nmeros aleatorios de una distribucin poisson, rpois(n,lamda)

rpois(20,0.5)#20 nmeros aleatorios con lamda=0.5

#para generar nmeros aleatorios de una distribucin bernulli, rbern(n,prob) de la

librera #LaplacesDemon

rbern(20,0.7)#20 nmeros aleatorios con probabilidad 0.7

#para generar nmeros aleatorios de una distribucin hypergeometrica, rhyper(nn, m, n,

k)

rhyper(20,4,6,7)#20 nmeros aleatorios, m=4 objetos de la poblacin ,k=7 elementos

seleccionados de la #poblacin, n=6 muestra

Grficos plot, pie, boxplot, barplot, hist


#la funcin plot() es la ms general para hacer grficos

plot(sapply(seq(0,5*pi,0.01),function(o) cos(o)),type="l")

plot(sapply(seq(0,5*pi,0.01),function(o) sin(o)),type="l")

plot(sapply(seq(0,5*pi,0.01),function(o) exp(o)),type="l")

plot(sapply(seq(0,5*pi,0.01),function(o) 1/exp(o)),type="l")

#la function barplot() es para ver graficamente las tablas de frecuencia

barplot(table(paste("Jugador",round(runif(100,1,5),0),sep="

")),col=c("red","blue","yellow","green","pink"))

12
#la funcin hist() es para realizar un histograma de frecuencias

hist(runif(100,20,30),main="histograma de frecuencia",xlab = "cortes",breaks =

seq(20,30,2))

#para crear un diagrama de pastel, pie()

B= c(5, 3, 1, 8, 9, 4, 6)

cols= colorRampPalette(c("#ff8080","#80ffff"))(7)

porcentajes=round(100*B/sum(B), 1)

pielabels<- paste(porcentajes, "%", sep="")

pie(B, main="Diagrama de Pastel", col=cols, labels=pielabels, cex=0.8)

legend("topright", c("Lun","Mar","Mie","Jue","Vie","Sab","Dom"), cex=0.8, fill=cols)

#para crear un diagrama de cajas, boxplot()

Ventas=data.frame(matrix(rnorm(120, 1000,50),10,12))

names(Ventas)=c("ENE","FEB","MAR","ABR","MAY","JUN","JUL","AGO","SEP","

OCT","NOV","DIC")

colo=colorRampPalette(c("blue","yellow"))(12)#creo un vector de colores

boxplot(Ventas, col=colorRampPalette(c("#ff8080","#80ffff"))(12))

stripchart(Ventas, vertical = TRUE, method = "jitter", add = TRUE, pch = 19, col =colo

)#agrego puntos a las cajas con colores

Funciones de agregacin, apply, sapply, tapply, mapply, ddply, aaply.


Estas funciones nos ayudan simplificar el clculo, ya sea matricialmente o

vectorialmente, dependiendo de la dimensin de los datos.

#funcion apply para hacer clculos por filas o columnas, apply(x,numero,fun)

apply(matrix(1,4,5),1,sum)#para suma por filas

apply(matrix(1,4,5),2,sum)#para sumar por columnas

13
apply(simplify2array(list(matrix(1,4,5),matrix(1,4,5))),1:2,sum)#para sumar por celda

de cada matriz

#funcin agrupa por categoras y a cada grupo realiza su respectivo calculo

#tapply(vector,categoras,mean)

Clima=data.frame(Temperatura=runif(120,20,25),Meses=rep(1:12,10))

tapply(Clima$Temperatura,Clima$Meses,mean)

#funcin que utiliza un vector para realizar un clculo para cada valor del vector.

#la funcin lapply retorna una lista en la salida, utilizo unlist() para convertirlo en un

vector.

unlist(lapply(1:10, function(x) x^2))

#la funcin sapply sirve para recorrer una lista o un vector, basado en un ndice que

recorre cada celda.

A=c(5,4,8,7,4,2,1,3,2,4,5,1,2,4,2,3,4,0,1,8)

sapply(1:20, function(x) A[x]^2)

#mapply es la versin multivariada de sapply

mapply(function(x,y) x+y, x = 1:4, y = 1:4)

mapply(rep, times = 1:4, x = 1:4)

mapply(function(x,y) paste0(x,y), y = 1:4, x = 1:4)

#rapply es para convertir una un objeto de tipo lista en vector

A=list(matrix(runif(25,0,5),5,5))

rapply(A,c)

rapply(A,factor)#la salida son valores de tipo factor

rapply(A,function(x) round(x,1))

B= matrix(runif(25,0,5),5,5)

14
as.vector(B)#as.vector(x) tambin lo convierte en vector pero el objeto x no es de tipo

lista

#la funcion split(x,y) agrupa un vector x segn un vector con categrico y

A=data.frame(temp=runif(24, 20,25),tri=rep(1:3,8))

split(A$temp,A$tri)

#la function do.call(function,x) donde x debe ser una lista, al cual se le aplicara una

function

do.call(c,lapply(1:10,function(x) x^2))

do.call(rbind,lapply(1:10,function(x) x^3))

#la funcin rollaply aplica un clculo a un vector de series de tiempo

library(zoo)

Guayaquil=rep(1:7,52)

rollapply(Guayaquil,7,sum,by=7)#coge de 7 en 7 los valores, y de los 7 valores coge

para aplicar la suma

#para convertir una lista a data frame, ldply(list)

library(plyr)

ldply(list(Clima=c(1,7,9,4,3)))

#para realizar algunas estadsticas, segn variables categricas

Clima=data.frame(Instituto=c("inamhi","inp","inp","inocar","inamhi","inamhi","inocar"

,"inp"),Ciudad=c("guayaquil","quito","guayaquil","quito","guayaquil","quito","guayaqu

il","quito"),Puntaje=c(7,5,4,6,8,9,5,4))

ddply(Clima, c("Instituto", "Ciudad"),

summarise,N=length(Puntaje),suma=sum(Puntaje),media=suma/N)

library(plyr)

A=array(1:60, dim=c(3,4,5))

15
A

aaply(A,1,sum)#la suma de todas las 3 filas de las 5 matrices

aaply(A,2,min)#el minimo de todas las 4 columnas de las 5 matrices

aaply(A,3,max)#el maximo de todas las 5 matrices

B=array(1:120000, dim=c(3,4,10000))

aaply(B,3,mean,.progress = "tk")

aaply(B,3,mean,.progress = "text")

aaply(B,3,mean,.progress = progress_text(char = "-"))

Como crear Funciones.


A continuacin, se explicar cmo crear funciones sencillas en R

#funcin suma dos valores

suma=function(val1,val2)

return(val1+val2)

suma(100,2000)

#dibuja nmeros aleatorios y los grafica segn un tipo de carcter

grafic=function(n1,m1,m2,titulo,color,tipo)

plot(runif(n1,m1,m2),main=titulo,col=color,type=tipo)

grafic(400,0,100,"Mi primer Plot","#AA8304","h")

#funcin que guarda segn un nombre especifico de archivo

guardar=function(n1,j1,j2,nombre)

16
{

variable=data.frame(runif(n1,j1,j2))

write.table(variable,nombre,row.names = F,col.names = F)

guardar(10,0,20,"NumerosAleatorios.txt")

#funcin que grafica segn funcin especfica por el usuario

fungraf=function(fun,sequ)

plot(sapply(sequ,function(w) fun(w)),type="l")

fungraf(exp,seq(1,5*pi,0.01))

fungraf(sin,seq(1,5*pi,0.01))

fungraf(cos,seq(1,5*pi,0.01))

fungraf(acosh,seq(1,5*pi,0.01))

fungraf(log10,seq(1,500*pi,0.01))

#funcin que grafica nmeros aleatorios segn un ttulo especifico y color especifico

pintar=function(p1,p2,p3,titulo,color,tipo)

plot(runif(p1,p2,p3),main=titulo,col=color,type=tipo)

pintar(30,5,15,"Grafico","blue","h")

#Declarar una funcin que no siempre devuelve un vector de mismo tamao

g=function(x,a)

17
rep(c(x^2-a,x^3),round(abs(a))+1)

#como hacer simulaciones en R

a=seq(1,10,1)

b=seq(11,20,1)

ab=expand.grid(a,b)

multipli=function(x,y)

z=x*y

mapply(multipli,ab$Var1,ab$Var2)

#como hacer algunas bsquedas

A=round(runif(10,1,10),0)

which(A==1)

which.max(A)

which.min(A)

A=data.frame(x=c(1,2,5,2,5,1),y=c(4,7,5,15,1,4))

which(A$x==1 & A$y==4)

which(A$x==1 | A$y==4)

which(A$x!=4)

18
Sistemas de Informacin Geogrfica
library(ncdf4)
library(raster)
library(maptools)
library(RNetCDF)
library(raster)
library(sp)
library(gstat)
library(RStoolbox)
library(lubridate)
setwd("Intermedio Prediccion y Pronosticos")
rot=function(x) t(apply(x, 2, rev))
A=nc_open("etopo1.nc")
B=raster(rot(rot(rot(ncvar_get(A,A$var$Band1$name)))))
extent(B)=extent(min(A$dim$lon$vals),max(A$dim$lon$vals),min(A$dim$lat$vals),m
ax(A$dim$lat$vals))
plot(B)
A2=open.nc("etopo1.nc")
B2=read.nc(A2)
D=raster(rot(rot(rot(B2[[4]]))))
extent(D)=extent(min(B2[[3]]),max(B2[[3]]),min(B2[[2]]),max(B2[[2]]))
plot(D)
#como cortar una imagen raster
G=crop(D,extent(-90,-78,-6,2))
plot(G)
#como cortar una imagen raster utilizando un polgono
Ecuador=readShapeSpatial("nxprovincias.shp")
#proj4string(Ecuador)=CRS("+proj=longlat +datum=WGS84 +ellps=WGS84
+towgs84=0,0,0")
proj4string(Ecuador)=CRS("+proj=utm +zone=17 +south +ellps=WGS84")
Ecuador=spTransform(Ecuador,CRS=CRS("+proj=longlat +datum=WGS84
+ellps=WGS84 +towgs84=0,0,0"))

19
K=mask(crop(D,Ecuador,snap="out"),Ecuador)
plot(K)
#tratamiento de imagenes raster
CHL=nc_open("CHL.nc")#abro un archive Netcdf
CHLA=ncvar_get(CHL,CHL$var$chlorophyll$name)#especifico la informacion que
voy a usar
#Guardo mis imagenes en una lista
CHLF=lapply(1:168, function(i) raster(t(CHLA[,,i])))#creo una lista de rasters
Fecha=seq(as.Date("2003/1/01"), by = "month", length.out = 168)

#Doy la extensin, proyeccin y nombre a las imgenes raster


for(i in 1:168)
{
extent(CHLF[[i]])=extent(min(CHL$dim$longitude$vals),max(CHL$dim$longitude$va
ls),min(CHL$dim$latitude$vals),max(CHL$dim$latitude$vals))
proj4string(CHLF[[i]])=CRS("+proj=longlat +datum=WGS84 +ellps=WGS84
+towgs84=0,0,0")
names(CHLF[[i]])=paste(month(Fecha[i],label = T),year(Fecha[i]),"CHL",sep="_")
}
plot(CHLF[[1]],col=rainbow(1000))

#Como localizar un punto y extraerlo


locator()
puntos=data.frame(x=-94.10022,y=-1.191571)
coordinates(puntos)=c("x","y")
extract(CHLF[[1]],puntos,buffer=1000)

#Extraje los valores de cada raster para ese punto utilizando un radio de 500 m
CHLP=do.call(c,lapply(1:168, function(i)
extract(CHLF[[i]],puntos,buffer=500,fun=mean)))
#para convertir de raster a puntos
Puntos=data.frame(rasterToPoints(CHLF[[1]]))

20
coordinates(Puntos)=c("x","y")
gridded(Puntos)=TRUE#para llevarlos de dataframes a raster esta es la mejor opcion
Puntos=raster(Puntos)
plot(Puntos)
#para reemplazar valores faltantes
Union=cover(CHLF[[1]],CHLF[[2]])#Reemplaza los nans de x por los valores de y
par(mfrow=c(3,1))
plot(CHLF[[1]],col=rainbow(1000))
plot(CHLF[[2]],col=rainbow(1000))
plot(Union,col=rainbow(1000))

#para crear archivos netcdf


dim(CHLF[[1]])
Y=array(do.call("c",lapply(1:168, function(x) as.matrix(CHLF[[x]])) ), dim =
c(241,505,168))
long=seq(extent(CHLF[[1]])[1],extent(CHLF[[1]])[2],length.out=505)
lat=seq(extent(CHLF[[1]])[3],extent(CHLF[[1]])[4],length.out=241)
time=as.vector(seq(as.Date("2003/1/01"), by = "month", length.out = 168))

dimX = ncdim_def("Long", "degrees", long)


dimY = ncdim_def("Lat", "degrees", lat)
dimT = ncdim_def("Time", "Months", time)
#definir los datos
Long= ncvar_def( "long", "degrees", list(dimX),missval = -9999,longname ="decimal
degrees", prec="double")
Lat = ncvar_def( "lat" , "degrees", list(dimY),missval = -9999,longname ="decimal
degrees", prec="double")
Time= ncvar_def( "time", "months", list(dimT),missval = -9999,longname ="years",
prec="double")
data= ncvar_def( "chla", "mg/m^3", list(dimX,dimY,dimT), missval = -9999,longname
="chlorophyll",prec="double")
nc = nc_create("CHLF.nc", list(Long,Lat,Time,data))

21
ncvar_put(nc,Long,long)
ncvar_put(nc,Lat,lat)
ncvar_put(nc,Time,time)
ncvar_put(nc,data,rot(Y))
nc_close(nc)

A=nc_open("CHLF.nc")
D=ncvar_get(A,A$var$chla$name)
plot(raster(D[,,1]))
#Interpolar con IDW
OBS=data.frame(rasterToPoints(CHLF[[1]]))
names(OBS)=c("x","y","data")
coordinates(OBS)=c("x","y")
proj4string(OBS)=CRS("+proj=longlat +datum=WGS84 +ellps=WGS84
+towgs84=0,0,0")
Mu=mean(stack(CHLF),na.rm=T)
Mu[na.omit(Mu)]=99
Mu[is.na(Mu)]=100
Var=mean(stack(list(Mu,CHLF[[1]])),na.rm=T)#eltruco esta en el na.rm=T
plot(CHLF[[1]])
PRED=data.frame(rasterToPoints(Var,fun = function(x){x==99}))#solo los que tienen
99
names(PRED)=c("x","y","data")
coordinates(PRED)=c("x","y")
proj4string(PRED)=CRS("+proj=longlat +datum=WGS84 +ellps=WGS84
+towgs84=0,0,0")
IDW=idw(data~1,OBS,PRED,maxdist=10000)
gridded(IDW)=T
PREDIDW=raster(IDW)
extent(PREDIDW)=extent(CHLF[[1]])
final=cover(A,PREDIDW)
plot(final)
22

Potrebbero piacerti anche