1. Introducción a R para Gestión Digital de Sistemas Agropecuarios

Bases de R + Introducción a dplyr y tidyr

# Ayuda en R
?mean
x <- c(0:10, 50)
x
##  [1]  0  1  2  3  4  5  6  7  8  9 10 50
round(mean(x),1)
## [1] 8.8
?sd
round(sd(1:10) ^ 2, 2)
## [1] 9.17

Vectores

Ejemplo con sólidos solubles o grados brix en pulpa de guayaba

Vector numérico

brix <- c(10.2, 11.5, 10.8, 12.1, 11.7)

# Imprimir brix
brix
## [1] 10.2 11.5 10.8 12.1 11.7
# Clase de vector de brix
class(brix) #como es numérico puedo hacer operaciones matemáticas
## [1] "numeric"
# brix promedio
mean(brix)
## [1] 11.26
# mediana
median(brix)
## [1] 11.5
# máximo
max(brix)
## [1] 12.1
# mínimo
min(brix)
## [1] 10.2

Vector character

humedad <- c(78.5, 80.1, 79.4, NA, 81)
class(humedad)
## [1] "numeric"
humedad_caracter <- c(78.5, 80.1, 79.4, NA, 81, "90")
class(humedad_caracter)
## [1] "character"

Operaciones básicas

peso_fruta <- c(1.2, 1.5, 1.3, 1.4, 1.6) #kg
fraccion_util <- c(0.68, 0.72, 0.70, 0.69, 0.71)
pulpa_util <- peso_fruta * fraccion_util
pulpa_util
## [1] 0.816 1.080 0.910 0.966 1.136
mean(pulpa_util)
## [1] 0.9816

Vectores de texto y factores

fruta <- c("Mango", "Guayaba", "Guayaba", "Mango")
fruta
## [1] "Mango"   "Guayaba" "Guayaba" "Mango"
class(fruta)
## [1] "character"

Convertir a factor el caracter anterior

#Convertir a fctor
fruta_f <- factor(fruta)
class(fruta_f)
## [1] "factor"
levels(fruta_f)
## [1] "Guayaba" "Mango"
table(fruta_f)
## fruta_f
## Guayaba   Mango 
##       2       2
# Temperaturas de secado
tratamiento <- c("60C", "70C", "80C", "60C", "90C", "105C")
tratamiento_f <- factor(tratamiento)

#Promedio
mean(tratamiento_f) #Arroja error porque es un factor
## Warning in mean.default(tratamiento_f): argument is not numeric or logical:
## returning NA
## [1] NA
# Niveles de tratamiento
levels(tratamiento_f)
## [1] "105C" "60C"  "70C"  "80C"  "90C"
#Tabla de frecuencias
table(tratamiento_f)
## tratamiento_f
## 105C  60C  70C  80C  90C 
##    1    2    1    1    1

Indexación: Acceder a datos

pH <- c(3.8, 4.1, 3.6, 4.3, 3.9)

pH[1] #Primer valor
## [1] 3.8
pH[4] #Cuarto valor
## [1] 4.3
pH[-1] #Todos excepto primer valor
## [1] 4.1 3.6 4.3 3.9
pH[pH > 3.8] #Valores mayores a 3.8
## [1] 4.1 4.3 3.9
pH[pH != 3.6] #Valores distintos a 3.6
## [1] 3.8 4.1 4.3 3.9

Crear secuencias

temperatura <- seq(from = 40, to = 100, by = 10)
#Ploteo de temperatura al cuadrado
plot(temperatura^2, 
     ylab = "Temperatura °C",
     xlab = "Muestras",
     main = "Temperatura de muestras de harinas")

Crear un Data Frame

}

datos <- data.frame(
  muestra = 1:8,
  producto = c("Mango", "Mango", "Guayaba", "Guayaba",
               "Mango", "Guayaba", "Mango", "Guayaba"),
  tratamiento = c("Control", "Secado", "Control", "Secado",
                  "Control", "Secado", "Secado", "Control"),
  brix = c(12.1, 13.4, 10.5, 11.8, 12.7, 11.1, 13.0, 10.8),
  ph = c(4.2, 4.0, 3.7, 3.8, 4.1, 3.9, 4.0, 3.8),
  humedad = c(82.3, 18.5, 79.8, 20.1, 81.0, 19.3, 17.8, 80.4)
)

datos
##   muestra producto tratamiento brix  ph humedad
## 1       1    Mango     Control 12.1 4.2    82.3
## 2       2    Mango      Secado 13.4 4.0    18.5
## 3       3  Guayaba     Control 10.5 3.7    79.8
## 4       4  Guayaba      Secado 11.8 3.8    20.1
## 5       5    Mango     Control 12.7 4.1    81.0
## 6       6  Guayaba      Secado 11.1 3.9    19.3
## 7       7    Mango      Secado 13.0 4.0    17.8
## 8       8  Guayaba     Control 10.8 3.8    80.4
class(datos)
## [1] "data.frame"
# Estructura del data frame
str(datos)
## 'data.frame':    8 obs. of  6 variables:
##  $ muestra    : int  1 2 3 4 5 6 7 8
##  $ producto   : chr  "Mango" "Mango" "Guayaba" "Guayaba" ...
##  $ tratamiento: chr  "Control" "Secado" "Control" "Secado" ...
##  $ brix       : num  12.1 13.4 10.5 11.8 12.7 11.1 13 10.8
##  $ ph         : num  4.2 4 3.7 3.8 4.1 3.9 4 3.8
##  $ humedad    : num  82.3 18.5 79.8 20.1 81 19.3 17.8 80.4
# Ver nombres de variables
names(datos)
## [1] "muestra"     "producto"    "tratamiento" "brix"        "ph"         
## [6] "humedad"
#Resumen general
summary(datos)
##     muestra       producto         tratamiento             brix      
##  Min.   :1.00   Length:8           Length:8           Min.   :10.50  
##  1st Qu.:2.75   Class :character   Class :character   1st Qu.:11.03  
##  Median :4.50   Mode  :character   Mode  :character   Median :11.95  
##  Mean   :4.50                                         Mean   :11.93  
##  3rd Qu.:6.25                                         3rd Qu.:12.78  
##  Max.   :8.00                                         Max.   :13.40  
##        ph           humedad     
##  Min.   :3.700   Min.   :17.80  
##  1st Qu.:3.800   1st Qu.:19.10  
##  Median :3.950   Median :49.95  
##  Mean   :3.938   Mean   :49.90  
##  3rd Qu.:4.025   3rd Qu.:80.55  
##  Max.   :4.200   Max.   :82.30
#Guardar data set datos
write.csv(datos, "data/datos_frutas.csv", row.names = F)

Exploración del Data Set

class(datos)
## [1] "data.frame"
#Acceder a una columna
datos$brix
## [1] 12.1 13.4 10.5 11.8 12.7 11.1 13.0 10.8
datos$ph
## [1] 4.2 4.0 3.7 3.8 4.1 3.9 4.0 3.8
names(datos)
## [1] "muestra"     "producto"    "tratamiento" "brix"        "ph"         
## [6] "humedad"
#Promedio de °Brix
mean(datos$brix)
## [1] 11.925
#Promedio de humedad
mean(datos$humedad)
## [1] 49.9
#Tabla de frecuencias para productos
table(datos$producto)
## 
## Guayaba   Mango 
##       4       4
#Tabla de frecuencias para tratamiento
table(datos$tratamiento)
## 
## Control  Secado 
##       4       4

Gráficos Básicos en R

# Histograma de humedad
hist(datos$humedad,
     main = "Distribución de humedad",
     xlab = "Humedad (%)",
     col = "lightblue")

# Boxplott de °Brix por producto
boxplot(brix ~ producto, data = datos,
        main = "°Brix por tipo de producto",
        xlab = "Fruta",
        ylab = "°Brix",
        col = "#27F538")

# Boxplot de humedad por tratamiento
boxplot(humedad ~ tratamiento, data = datos,
        main = "Humedad según tratamiento",
        xlab = "Tratamiento",
        ylab = "Humedad (%)",
        col = "lightgray")