TUTORIAL 1: Conceptos básicos de R

Objetivo: Aprender a importar y explorar datos, y hacer gráficos sobre la biodiversidad de Edimburgo

#install.packages("dplyr")
library(dplyr)
## Warning: package 'dplyr' was built under R version 3.5.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
edidiv <- read.csv("C:/Users/USUARIO/Documents/Geomatica/intro_to_R/CC-RBasics-master/edidiv.csv")

Para observar los datos de las primeras filas

head(edidiv)
##                      organisationName gridReference year         taxonName
## 1 Joint Nature Conservation Committee      NT265775 2000    Sterna hirundo
## 2 Joint Nature Conservation Committee      NT235775 2000    Sterna hirundo
## 3 Joint Nature Conservation Committee      NT235775 2000 Sterna paradisaea
## 4       British Trust for Ornithology          NT27 2000 Branta canadensis
## 5       British Trust for Ornithology          NT27 2000  Branta leucopsis
## 6     The Wildlife Information Centre         NT27S 2001     Turdus merula
##   taxonGroup
## 1       Bird
## 2       Bird
## 3       Bird
## 4       Bird
## 5       Bird
## 6       Bird

Para observar los datos de las ultimas filas

tail(edidiv)
##                            organisationName gridReference year
## 25679                    The Mammal Society      NT278745 2016
## 25680                    The Mammal Society      NT277724 2016
## 25681                    The Mammal Society      NT266728 2016
## 25682                    The Mammal Society      NT270728 2016
## 25683                    The Mammal Society      NT257762 2016
## 25684 People's Trust for Endangered Species        NT2372 2016
##                   taxonName taxonGroup
## 25679  Sciurus carolinensis     Mammal
## 25680   Capreolus capreolus     Mammal
## 25681  Sciurus carolinensis     Mammal
## 25682 Oryctolagus cuniculus     Mammal
## 25683         Vulpes vulpes     Mammal
## 25684   Erinaceus europaeus     Mammal

Indica si las variables son continuas, enteras, categóricas o caracteres

str(edidiv)
## 'data.frame':    25684 obs. of  5 variables:
##  $ organisationName: Factor w/ 28 levels "BATS & The Millennium Link",..: 14 14 14 8 8 28 28 28 28 28 ...
##  $ gridReference   : Factor w/ 1938 levels "NT200701","NT200712",..: 1314 569 569 1412 1412 1671 1671 1671 1671 1671 ...
##  $ year            : int  2000 2000 2000 2000 2000 2001 2001 2001 2001 2001 ...
##  $ taxonName       : Factor w/ 1275 levels "Acarospora fuscata",..: 1126 1126 1127 192 193 1202 365 977 472 947 ...
##  $ taxonGroup      : Factor w/ 11 levels "Beetle","Bird",..: 2 2 2 2 2 2 2 2 2 2 ...

El comando wtr(object.name)es un comando que muestra la estructura de los datos

La variable taxonGroup se muestra como una variable de carácter, y se va a pasar a variable categórica

el siguiente cimando muestra solos las primeras filas de esta columna

head(edidiv$taxonGroup)
## [1] Bird Bird Bird Bird Bird Bird
## 11 Levels: Beetle Bird Butterfly Dragonfly Flowering.Plants ... Mollusc

Este comando indica con qué tipo de variable se está trabajando: es carácter pero se desea que sea un factor

class(edidiv$taxonGroup)
## [1] "factor"
edidiv$taxonGroup <- as.factor(edidiv$taxonGroup)

La función as.factor() va a convertir cualquier valor que se inserte dentro, en un factor.

El siguiente comando muestra el número de filas y columnas que posee nuestra base de datos:

dim(edidiv)
## [1] 25684     5

Da un resumen de datos

summary(edidiv)
##                                              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 &amp; Ireland:1998    NT27   :  888  
##  The Wildlife Information Centre                     :1860    NT2871 :  767  
##  (Other)                                             :4203    (Other):17009  
##       year                      taxonName                taxonGroup  
##  Min.   :2000   Maniola jurtina      : 1710   Butterfly       :9670  
##  1st Qu.:2006   Aphantopus hyperantus: 1468   Bird            :7366  
##  Median :2009   Turdus merula        : 1112   Flowering.Plants:2625  
##  Mean   :2009   Lycaena phlaeas      :  972   Mollusc         :2226  
##  3rd Qu.:2011   Aglais urticae       :  959   Hymenopteran    :1391  
##  Max.   :2016   Aglais io            :  720   Mammal          : 960  
##                 (Other)              :18743   (Other)         :1446

El siguiente codigo da un resumen de esa variable en particular en su conjunto de datos

summary(edidiv$taxonGroup)
##           Beetle             Bird        Butterfly        Dragonfly 
##              426             7366             9670              421 
## Flowering.Plants           Fungus     Hymenopteran           Lichen 
##             2625              334             1391              140 
##        Liverwort           Mammal          Mollusc 
##              125              960             2226

Calcular la riqueza de especies

Hay que tener encuenta que Riqueza: Número total de especies diferentes en un lugar dado #Para ello se usa la función filter() que dvide evidi en varios objetos, cada uno con filas para un solo grupo taxonómico.

#library("dplyr")

Beetle = filter(edidiv, taxonGroup == "Beetle") 
Bird = filter(edidiv, taxonGroup == "Bird")
Butterfly = filter(edidiv, taxonGroup == "Butterfly")
Dragonfly = filter(edidiv, taxonGroup == "Dragonfly")
Flowering.Plants = filter(edidiv, taxonGroup == "Flowering.Plants")
Fungus = filter(edidiv, taxonGroup == "Fungus")
Hymenopteran = filter(edidiv, taxonGroup == "Hymenopteran")
Lichen = filter(edidiv, taxonGroup == "Lichen")
Liverwort = filter(edidiv, taxonGroup == "Liverwort")
Mammal = filter(edidiv, taxonGroup == "Mammal")
Mollusc = filter(edidiv, taxonGroup == "Mollusc")

Para calcular la riqueza se usan las funciones unique() que identifica diferentes especies y length() que las cuenta.

a <- length(unique(Beetle$taxonName))
b <- length(unique(Bird$taxonName))
c <- length(unique(Butterfly$taxonName))
d <- length(unique(Dragonfly$taxonName))
e <- length(unique(Flowering.Plants$taxonName))
f <- length(unique(Fungus$taxonName))
g <- length(unique(Hymenopteran$taxonName))
h <- length(unique(Lichen$taxonName))
i <- length(unique(Liverwort$taxonName))
j <- length(unique(Mammal$taxonName))
k <- length(unique(Mollusc$taxonName))

Ahora se corre cada letra para calcular la riqueza

a
## [1] 37
b
## [1] 86
c
## [1] 25
d
## [1] 11
e
## [1] 521
f
## [1] 219
g
## [1] 112
h
## [1] 94
i
## [1] 40
j
## [1] 33
k
## [1] 97

Crear un vector y trazarlo

Un vector es un objeto de R que almacena valores, para crear el vector se usa la función c() y se agregan etiquetas con la función names()

biodiv <-  c(a,b,c,d,e,f,g,h,i,j,k)
biodiv
##  [1]  37  86  25  11 521 219 112  94  40  33  97
names(biodiv) <- c("Beetle", 
                   "Bird",
                   "Butterfly",
                   "Dragonfly",
                   "Flowering.Plants", 
                   "Fungus", 
                   "Hymenopteran",
                   "Lichen", 
                   "Liverwort",
                   "Mammal",
                   "Mollusc")
names(biodiv)
##  [1] "Beetle"           "Bird"             "Butterfly"        "Dragonfly"       
##  [5] "Flowering.Plants" "Fungus"           "Hymenopteran"     "Lichen"          
##  [9] "Liverwort"        "Mammal"           "Mollusc"

Para visualizar la riqueza se utiliza la siguiente función:

library(dplyr)
barplot(biodiv)

barplot 
## function (height, ...) 
## UseMethod("barplot")
## <bytecode: 0x0000000013bd2cc0>
## <environment: namespace:graphics>
help(barplot)
## starting httpd help server ... done
help(par)

Se puede guardar el archivo envolviendo el código en png() y dev.off()

library(dplyr)
png("barplot.png", width = 1600, height = 600)
barplot(biodiv, xlab = "Taxón", ylab = "Número de especies", ylim = c(0,600),cex.names = 1.5, cex.axis = 1.5, cex.lab = 1.5)

barplot(biodiv)

Crear un dataframe y trazarlo

Se utiliza un dataframe cuando se tiene más de una variable y múltiples tipos de datos.Dataframe won tablas de valores de estructura bidimensional con filas y columnas.

Ahora se creará un dataframe con los datos de riqueza y luego se guardará usando write.csv()

taxa <- c("Beetle", 
          "Bird",
          "Butterfly",
          "Dragonfly",
          "Flowering.Plants", 
          "Fungus", 
          "Hymenopteran",
          "Lichen", 
          "Liverwort",
          "Mammal",
          "Mollusc")
taxa_f <- factor(taxa)
richness <- c(a,b,c,d,e,f,g,h,i,j,k)
biodata <- data.frame(taxa_f, richness)
biodata
##              taxa_f richness
## 1            Beetle       37
## 2              Bird       86
## 3         Butterfly       25
## 4         Dragonfly       11
## 5  Flowering.Plants      521
## 6            Fungus      219
## 7      Hymenopteran      112
## 8            Lichen       94
## 9         Liverwort       40
## 10           Mammal       33
## 11          Mollusc       97
write.csv(biodata, file = "biodata.csv")

Si se quiere guardar un diagrama de barras usando el dataframe, se necesita cambiar el código, especificando columnas usando “$”

png("barplot2.png", width = 1600, height = 600)
barplot(biodata$richness, names.arg = c("Beetle", 
                                          "Bird",
                                          "Butterfly",
                                          "Dragonfly",
                                          "Flowering.Plants", 
                                          "Fungus", 
                                          "Hymenopteran",
                                          "Lichen", 
                                          "Liverwort",
                                          "Mammal",
                                          "Mollusc"),
        xlab = "Taxón", ylab = "Número de especies", ylim = c(0,600))
dev.off()
## png 
##   2

Ejercicio de aplicaión

Para calcular la media se usa la función mean()

gorrion <- mean(22, 24, 21)
martinpescador <- mean(26, 23, 25)
aguila <- mean(195, 201, 185)
colibri <- mean(8, 9, 9)

Envergadura <- c(gorrion, martinpescador, aguila, colibri)
Especiesaves <- c("gorrion", "martinpescador", "aguila", "colibri")
class(Especiesaves)
## [1] "character"
Especiesaves <- as.factor(Especiesaves)
class(Especiesaves)
## [1] "factor"
Aves <- data.frame(Especiesaves, Envergadura)

Si se quiere guardar un diagrama de barras usando el dataframe, se necesita cambiar el código, especificando columnas usando $

png("avesplot3.png", width = 800, height = 600)
barplot(Aves$Envergadura, names.arg = Aves$Especiesaves,
xlab = "Especiesaves", ylab = "Envergadura", ylim = c(0,200),
col = "red")
dev.off()
## png 
##   2
Aves
##     Especiesaves Envergadura
## 1        gorrion          22
## 2 martinpescador          26
## 3         aguila         195
## 4        colibri           8

Gracias por la atención prestada.