Primero que todo debemos entender que R es un lenguaje de programacion utilizado como un software para computación estadística, el cual no cuenta con una interfaz grafica, es decir que al presionar algun boton del entorno de RStudio el cual fue desarrollado para la programacion con este lenguaje de R no desplega un menu o una ventana emergente. Lo que hace que este programa de analisis estadistico sea tan utilizado es que es un software libre y sus codigos son abiertos, es decir, que estan al alcance de cualquier usuario.
Como se menciono anteriormente R es un lenguaje de programacion que no cuenta con una interfaz grafica, para esto se utiliza RStudio como su entorno de desarrollo integrado dedicado a la computacion estadistica y graficos. Con esta interfazo podemos acceder a nuestros scripts y datos, encontrar ayuda y obtener una vista previa de los gráficos y las salidas de nuestros codigos de R.
Puede descargarlo de forma gratuita en el sitio web de RStudio (seleccione la versión gratuita de escritorio de código abierto).En el caso que utilice Mac, además de R y RStudio, debe descargar XQuartz.
Reconociendo el entorno de RStudio: Lo primero que encontrara en la interfaz es una division de cuatro ventanas, la primera ubicada en la parte superior izquierda es la ventana de secuencia de comandos de R, donde podra ejecutar lineas de codigo para realizar analisis estadistico y graficos para representarlos. La segunda ventana de la parte superior derecha es el “entorno” donde puede ver el trabajo actual, las variables que esta utilizando, los valores, datos importados, fnciones definidas, entre otras. La tercer ventana en la parte inferior izquierda es la “consola” la cual le permite visualizar el resultado de sus lineas de codigo de R, lo errores del codigo, advertencias y mensajes, y por ultimo la ventana de la parte inferior derecha le permite ver los paquetes instalados anteriormente, las carpetas del ordenador, graficos y ayudas de funciones del codigo R.
Nota: los codigos que ejecuta en la “consola” no se guardan, pero en la ventana de la parte izquierda donde esta su entorno de trabajo (Archivo Script, R Markdown, R Notebook) se crea un archivo que puede reproducir a futuro y adicionalmente añadir comentarios, utilizando “#” y guardando el archivo (lo puede hacer utilizando la funcion Ctrl + S)
Ahora debemos conocer que es un “paquete” en R, este es un conjunto de comandos que se pueden cargar en R para proporcionar una funcionalidad adicional, como por ejemplo realizar mapas.
Para instalar un paquete se utiliza la siguiente funcion (install.packages), solo es necesario instalar una vez el paquete, asi que lo puede realizar en la consola para no tener la linea del codigo en el entorno de trabajo, ni volver a instalar nuevamente el paquete. Luego de instalar un paquete estadistico debe cargar el paquete utilizando la funcion “library”, por ejemplo: Instalaremos el paquete “dplyr”
#install.packages("dplyr")
library("dplyr")
## Warning: package 'dplyr' was built under R version 3.6.3
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
Es importante conocer el directorio de trabajo del computador, esta es la ubicación de sus archivos por defecto para Rstudio. Esto le permitira trabajar mas rapido y ordenadamente en R. Para saber donde esta el directorio de trabajo, ejecute el codigo “getwd”, y si desea cambiarlo puede utilizar el codigo “setwd”.
getwd()
## [1] "C:/Users/mario/Documents/Ing. Agronomica/9 Semestre/Geomatica"
Con esta funcion encontramos el directorio de trabajo, que en mi caso es: “C:/Users/mario/Documents/Ing. Agronomica/9 Semestre/Geomatica” Hay que tener en cuenta que cuando se desee cambiar este directorio se debe colocar con el “slash normal”(/) y no invertido ()como sale en la ubicacion del computador
Para importar datos a R lo puede realizar de dos maneras, la primera realizando clic en el botón Importar conjunto de datos en la ventana superior derecha y navegar hasta donde guardó su archivo y la segunda manera es utilizando la funcion “read.csv” si los archivos estan separados por comas. Pero primero debemos asignar con “<-” los datos importados a nuestro archivo, en este caso se llamara “hd” como se muestra a continuacion:
hd <- read.csv("C:/Users/mario/Documents/Ing. Agronomica/9 Semestre/Geomatica/Introduccion-R/CC-RBasics-master/edidiv.csv")
NOTA: R funciona mejor con archivos de formato “.csv” (valores separados por comas). Si sus archivos están separados por punto y coma, utilice “read.csv2” en lugar de read.csv, o utilizar el argumento de la “sep” (por separador) en la read.csv
Un paso muy importante es verificar que los datos se importaron sin ningun error, lo cual podemos realizar utilizando las siguiente funcion:
View(hd)
Al correr la anterior linea de codigo se nos abrira otra ventana en la parte superior con los archivos, estos son los que debemos verificar que esten sin ningun error, por ejemplo: Que no salgan las columnas de separacion, que no salga algun dato, etre otros.
Luego de identificar que los datos fueron importados correctamente, es importante revisar la estructura de datos debido a que R puede tomar variables cuantitativas (1,2,3,4) como numericas, esto lo podemos realizar con la funcion “str”
str(hd)
## 'data.frame': 26033 obs. of 5 variables:
## $ organisationName: Factor w/ 30 levels "BATS & The Millennium Link",..: 16 16 16 9 9 30 30 30 30 30 ...
## $ gridReference : Factor w/ 1940 levels ""," Orsodacnidae & Megalopodidae)",..: 1316 571 571 1414 1414 1673 1673 1673 1673 1673 ...
## $ year : Factor w/ 24 levels "","2000","2001",..: 2 2 2 2 2 3 3 3 3 3 ...
## $ taxonName : Factor w/ 1229 levels "","2000","2001",..: 1084 1084 1085 194 195 1157 357 938 456 909 ...
## $ taxonGroup. : Factor w/ 101 levels "","Ancistrocerus gazella",..: 22 22 22 22 22 22 22 22 22 22 ...
Como se observa la linea de codigo “str” nos dio como resultado cada variable y su respectiva estructura, mostrando 5 variables todas tomadas como factor.
Si desea acceder solamente a una columna de un marco de datos, utilizando el signo de dólar, despues de la variable a la que desea acceder. Por ejemplo: “hd$taxonName”. Esta sintaxis le permite ver, modificar y / o reasignar esta variable.
head(hd$taxonGroup) # Muestra solo las primeras filas de esta columna
## [1] Bird; Bird; Bird; Bird; Bird; Bird;
## 101 Levels: Ancistrocerus gazella ... Vespula (Paravespula) vulgaris
class(hd$taxonGroup) # Indica el tipo de variable
## [1] "factor"
hd$taxonGroup <- as.factor(hd$taxonGroup)
Utilizando la funcion “as.factor” convertimos cualquier valor en un factor.
class(hd$taxonGroup)
## [1] "factor"
Si solamente ejecuta “as.factor(hd$taxonGroup)” la transformacion de la estructura de la variable funcionaria una vez, pero no cambiaria los datos, por esto se debe asignar con la flecha el resultado de la función a la variable como se realizo anteriormente.
Con las siguientes funciones podremos conoces informacion adicional de nuestros datos
dim(hd) # Muestra el número de filas y columnas
## [1] 26033 6
summary(hd) # Muestra un resumen de los datos
## organisationName gridReference
## Biological Records Centre :6744 NT2673 : 2741
## RSPB :5809 NT2773 : 2031
## Butterfly Conservation :3000 NT2873 : 1247
## Scottish Wildlife Trust :2070 NT2570 : 1001
## Conchological Society of Great Britain & Ireland:1998 NT2871 : 767
## The Wildlife Information Centre :1860 NT2975 : 654
## (Other) :4552 (Other):17592
## year taxonName taxonGroup.
## 2009 : 5768 Maniola jurtina : 1710 Butterfly; :9670
## 2008 : 2184 Aphantopus hyperantus: 1468 Bird; :7366
## 2015 : 2081 Turdus merula : 1112 Flowering.Plants;:2625
## 2013 : 1929 Lycaena phlaeas : 972 Mollusc :1998
## 2011 : 1884 Aglais urticae : 959 Hymenopteran; :1048
## 2004 : 1847 Aglais io : 720 Mammal; : 960
## (Other):10340 (Other) :19092 (Other) :2366
## taxonGroup
## Butterfly; :9670
## Bird; :7366
## Flowering.Plants;:2625
## Mollusc :1998
## Hymenopteran; :1048
## Mammal; : 960
## (Other) :2366
Para mostrar una sola variable utilizamos la siguiente funcion
#summary(hd$taxonGroup) Muestra un resumen de esa variable "taxonGroup" (columna) en su conjunto de datos "hd"
La base de datos que importamos contiene diferentes especies recolectadas en Edimburgo de 2000 a 2016, si queremos por ejemplo evaluar la riqueza de especies, es decir, el número de especies diferentes en cada grupo. podemos realizarlo de la siguien te manera: Lo primero seria filtar por cada taxon los datos y finalmente ralizar el conteo de cada uno de estos grupos. Para filtrar utilizamos la siguiente funcion de la libreria (dplyr)
Beetle <- filter(hd, taxonGroup == "Beetle;")
En la funcion anterior “filter”, el primer argumento de la función es el marco de datos “hd”, el segundo argumento es la condición en la que desea filtrar “taxonGroup”,como solo queremos los escarabajos aquí, decimos: la variable taxonGroup DEBE SER EXACTAMENTE (==) Beetle (Escarabajo) NOTA:Se debe tener en cuenta que en la base de datos los taxones salen con “;” ddespues del nombre, ejemplo (Beetle;) si no se pone exactamente como esta en la base de datos R no lo encontrara y no podra filtar, ni mas adelante realizar otras funcion, debido que para R no existiria el taxon, se podria modificar esto desde la base de datos de excel, pero para este caso no lo realizaremos.
Ahora vamos a filtrar cada uno de los taxones de nuestra columna “taxonGroup”, si desea recordar cada uno de los taxones, puede utilizar la funcion de "summary(hd$taxonGroup) que se utilizo anteriormente
Bird <- filter(hd, taxonGroup == "Bird;")
Butterfly <- filter(hd, taxonGroup == "Butterfly;")
Flowering.Plants <- filter(hd, taxonGroup == "Flowering.Plants;")
Mollusc <- filter(hd, taxonGroup == "Mollusc;")
Hymenopteran <- filter(hd, taxonGroup == "Hymenopteran;")
Mammal <- filter(hd, taxonGroup == "Mammal;")
Dragonfly <- filter(hd, taxonGroup == "Dragonfly;")
Fungus <- filter(hd, taxonGroup == "Fungus;")
Lichen <- filter(hd, taxonGroup == "Lichen;")
Liverwort <- filter(hd, taxonGroup == "Liverwort;")
Beetle <- filter(hd, taxonGroup == "Beetle;")
A continuacion para contar el numero de especies utilizaremos dos funciones anidadas “unique” que identifica diferentes especies del mismo taxon y “length” que las cuenta.
a <- length(unique(Bird$taxonName))
b <- length(unique(Butterfly$taxonName))
c <- length(unique(Flowering.Plants$taxonName))
d <- length(unique(Mollusc$taxonName))
e <- length(unique(Hymenopteran$taxonName))
f <- length(unique(Mammal$taxonName))
g <- length(unique(Dragonfly$taxonName))
h <- length(unique(Fungus$taxonName))
i <- length(unique(Lichen$taxonName))
j <- length(unique(Liverwort$taxonName))
k <- length(unique(Beetle$taxonName))
Ahora para ver la diversidad de cada taxon que filtramos anterior mente solo es necesario colocar el nombre de la variable asignada anteriormente para cada taxon, por ejemplo a continuacion veremeos la diversidad de las variables “a,b,c”
a
## [1] 86
b
## [1] 25
c
## [1] 521
Un vector es otro tipo de objeto R que almacena valores. A diferencia de un marco de datos, que tiene dos dimensiones (filas y columnas), un vector solo tiene una.
Ahora crearemos un vector con los datos obtenidos anteriormente con la diversidad de taxones, esto lo podemos realizar utilizando la funcion “c()” (c significa concatenar, o encadenar). También podemos agregar etiquetas con la funcion “names()”, para que los valores no salgan de la nada
biodiv <- c(a,b,c,d,e,f,g,h,i,j,k)
names(biodiv) <- c("Beetle",
"Bird",
"Butterfly",
"Dragonfly",
"Flowering.Plants",
"Fungus",
"Hymenopteran",
"Lichen",
"Liverwort",
"Mammal",
"Mollusc")
biodiv
## Beetle Bird Butterfly Dragonfly
## 86 25 521 55
## Flowering.Plants Fungus Hymenopteran Lichen
## 58 33 11 219
## Liverwort Mammal Mollusc
## 94 40 31
Como se observa anteriormente el vector “biodiv” tiene concatenados los datos de los taxones con su respectivo numero de diversidad
barplot(biodiv)
Como se observa en la grafica anterior faltan titulos de los ejes, el eje “y” en este caso es muy corto para el taxon Buterrfly, para esto podemos utilizar la funcion “help()” que nos permite ver los argumentos que se pueden agregar a la grafica, lo cual se observara en la parte inferior derecha de R.
help(barplot) # Para obtener ayuda con la función barplot ()
## starting httpd help server ... done
help(par) # Para obtener ayuda con el trazado en general
Podemos guardar el archivo envolviendo el código en las funciones “png()” y “dev.off()”, que abren y cierran respectivamente el dispositivo de trazado.
barplot(biodiv, xlab="Taxa", ylab="Numero de especies", cex.names= 1.5, cex.axis=1.5, cex.lab=1.5,ylim=c(0,600) )
El código “cex” aumenta el tamaño de fuente cuando es mayor que uno (y lo disminuye cuando es menor que uno)
Primero crearemos un vector que contenga los nombres de todos los taxones (una columna), lo llamaremos en este caso “taxa” y otro objeto con todos los valores para la riqueza de especies de cada taxón (otra columna), “Richness”, y finalmente estos dos vectores los añadiremos a un marco de datos, utilizando la funcion “data.frame()”
# Crear un objeto llamado "taxa" que contiene todos los nombres de taxa
taxa <- c("Bird;",
"Butterfly;",
"Flowering.Plants;",
"Mollusc;",
"Hymenopteran;",
"Mammal;",
"Dragonfly;",
"Fungus;",
"Lichen;",
"Liverwort;",
"Beetle;")
# Convertir este objeto en un factor, es decir, una variable categórica
taxa_f <- factor(taxa)
# Combinando todos los valores para el número de especies en un objeto llamado riqueza
richness <- c(a,b,c,d,e,f,g,h,i,j,k)
# Crear el marco de datos (datafream) a partir de los dos vectores
biodata <- data.frame(taxa_f, richness)
# Guardando el archivo
write.csv(biodata, file="biodata.csv") # Se guardara en su directorio de trabajo
Para visualizar en nuevo marco de datos creado utilizamos la funcion “view()”, y se desplegara una nueva ventana donde saldran los dos vectores, en dos columnas
View(biodata)
A continuacion realizaremos un grafico con el marco de datos creado
barplot(biodata$richness, width = 1600,names.arg = c("Bird",
"Butterfly",
"Flowering.Plants",
"Mollusc",
"Hymenopteran",
"Mammal",
"Dragonfly",
"Fungus",
"Lichen",
"Liverwort",
"Beetle"),
xlab="Taxa", ylab="Numero de especies")
¿Puedes producir un diagrama de barras de la envergadura media de cada especie?
# Crear un vector con las especies de aves y de su envergadura
bird_sp <-c ("gorrion",
"martin_pescador",
"aguila",
"colibri",
"gorrion",
"martin_pescador",
"aguila",
"colibri",
"gorrion",
"martin_pescador",
"aguila",
"colibri")
bird_spf <- as.factor(bird_sp)
envergadura <- c(22,26,195,8,24,23,201,99,21,25,185,99)
# Crear un marco de datos con los dos vectores
bird_data <-data.frame(bird_spf,envergadura)
# Guardar el documento
write.csv(biodata, file="biodata.csv")
class(bird_spf)
## [1] "factor"
bird_data
## bird_spf envergadura
## 1 gorrion 22
## 2 martin_pescador 26
## 3 aguila 195
## 4 colibri 8
## 5 gorrion 24
## 6 martin_pescador 23
## 7 aguila 201
## 8 colibri 99
## 9 gorrion 21
## 10 martin_pescador 25
## 11 aguila 185
## 12 colibri 99
View(bird_data)
# Filtrar
gorrion <- filter(bird_data, bird_sp == "gorrion")
martin_pescador <- filter(bird_data, bird_sp == "martin_pescador")
aguila <- filter(bird_data, bird_sp == "aguila")
colibri <- filter(bird_data, bird_sp == "colibri")
birds <- c(gorrion,martin_pescador,aguila,colibri)
# media
m <- mean(gorrion$envergadura)
n <- mean(martin_pescador$envergadura)
o <- mean(aguila$envergadura)
p <- mean(colibri$envergadura)
means_birds <-c(m,n,o,p)
names(means_birds) <- c("gorrion","martin_pescador","aguila","colibri")
m
## [1] 22.33333
n
## [1] 24.66667
o
## [1] 193.6667
p
## [1] 68.66667
barplot(means_birds, width = 1600,names.arg = c("gorrion",
"martin_pescador",
"aguila",
"colibri"),
xlab="Especies", ylab="Envergadura promedio (cm)",ylim=c(0,200))
Argumento: Un elemento de una función, ya sea esencial u opcional, que informa o altera cómo funciona la función. Por ejemplo, puede ser una ruta de archivo en que la función debe importar de o Guardar en: file = "file-path". Puede modificar los colores en una parcela: col = "blue". Siempre puede encontrar qué argumentos toma una función escribiendo ?function-name en la línea de comando.
Clase: El tipo de datos contenidos en una variable: generalmente carácter (texto / palabras), numérico (números), entero (números enteros) o factor (valores de agrupación, útiles cuando tiene múltiples observaciones para sitios o tratamientos en sus datos) .
Comando: Un fragmento de código que realiza una acción, generalmente contiene una o más funciones. Ejecutas un comando presionando “Ejecutar” o usando un atajo de teclado como Cmd+Enter, Ctrl+EnteroCtrl+R
Comentario: Un poco de texto en un script que comienza con un hashtag #y no se lee como un comando. Los comentarios hacen que su código sea legible para otras personas: utilícelos para crear secciones en su secuencia de comandos y anotar cada paso de su análisis
Consola: La ventana donde puede escribir código directamente en la línea de comando ( 2+2 seguido de Enter regresará 4), y donde se mostrarán las salidas de los comandos que ejecuta, ubicado en la parte inferior izquierda.
Marco de datos: Un tipo de objeto R que consta de muchas filas y columnas; Piense en la hoja de cálculo de Excel. Por lo general, las columnas son variables diferentes (por ejemplo, edad, color, peso, envergadura), y las filas son observaciones de estas variables (por ejemplo, para bird1, bird2, bird3).
Archivo csv: Un tipo de archivo comúnmente utilizado para importar datos en R, donde los valores de diferentes variables se comprimen juntos (una cadena o línea de valores por fila) y se separan solo por comas (que indican columnas). R también puede aceptar archivos Excel (.xlsx), pero no lo recomendamos ya que los errores de formato son más difíciles de evitar.
Función: Código que realiza una acción, y realmente cómo se hace cualquier cosa en R. Generalmente toma una entrada, le hace algo y devuelve una salida (un objeto, un resultado de prueba, un archivo, un diagrama). Hay funciones para importar, convertir y manipular datos, para realizar cálculos específicos.
Objeto: Los componentes básicos de R. Si R fuera un lenguaje hablado, las funciones serían verbos (acciones) y los objetos serían sustantivos (¡los sujetos o, bueno, objetos de estas acciones!). Los objetos se llaman escribiendo su nombre sin comillas. Los objetos almacenan datos y pueden tomar diferentes formas. Los objetos más comunes son marcos de datos y vectores, pero hay muchos más, como listas y matrices.
Paquete: Un conjunto de funciones que proporcionan funcionalidad a R. Muchos paquetes vienen automáticamente con R, otros se pueden descargar para necesidades específicas.
Script: Similar a un editor de texto, aquí es donde escribe y guarda su código para referencia futura. Contiene una combinación de código y comentarios y se guarda como un simple archivo de texto que puede compartir fácilmente para que cualquiera pueda reproducir su trabajo.
Vector: Un tipo de objeto R con una dimensión: almacena una línea de valores que pueden ser caracteres, numéricos, etc.
Directorio de trabajo: La carpeta en su computadora vinculada a su sesión R actual, desde donde importa datos y guarda archivos. Lo configura al comienzo de su sesión con la setwd()función.
Espacio de trabajo:Este es su entorno de trabajo virtual, que contiene todas las funciones de los paquetes que ha cargado, los datos que ha importado, los objetos que ha creado, etc.