Nota: la base de datos utilizada para esta guía está disponible en este enlace.
Base de datos: Cadena Productiva del Mango en Colombia - Área, Producción y Rendimiento (2007-2017).
# mango: nombre de la variable donde están almacenados los datos.
# file: archivo separado por comas (csv).
# dec: tipo de decimal (punto o coma)
mango <- read.csv(file = "Mango.csv", dec = ".")
# str: estructura interna de la base de datos
# Character (chr) y factor: variable cualitativa o categórica
# Integer (int) y numeric (num): variable cuantitativa.
str(mango)
## 'data.frame': 2081 obs. of 16 variables:
## $ CÓD..DEP. : int 5 5 5 5 5 5 5 5 5 5 ...
## $ DEPARTAMENTO : Factor w/ 22 levels "AMAZONAS","ANTIOQUIA",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ CÓD..MUN. : int 5044 5093 5001 5501 5656 5679 5042 5761 5819 5837 ...
## $ MUNICIPIO : Factor w/ 250 levels "ACANDI","ACHI",..: 14 26 123 139 190 202 207 215 228 235 ...
## $ GRUPO.DE.CULTIVO : Factor w/ 1 level "FRUTALES": 1 1 1 1 1 1 1 1 1 1 ...
## $ SUBGRUPO.DE.CULTIVO : Factor w/ 1 level "MANGO": 1 1 1 1 1 1 1 1 1 1 ...
## $ CULTIVO : Factor w/ 1 level "MANGO": 1 1 1 1 1 1 1 1 1 1 ...
## $ DESAGREGACIÓN.REGIONAL.Y.O.SISTEMA.PRODUCTIVO: Factor w/ 2 levels "MANGO","MANGO INJERTO": 1 1 1 1 1 1 1 1 1 1 ...
## $ CÓDIGO.CULTIVO : num 1.12e+11 1.12e+11 1.12e+11 1.12e+11 1.12e+11 ...
## $ NOMBRE.CIENTIFICO : Factor w/ 1 level "MANGIFERA INDICA": 1 1 1 1 1 1 1 1 1 1 ...
## $ PERIODO : int 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 ...
## $ Área.Sembrada.ha. : int 156 362 8 50 70 1116 54 186 36 250 ...
## $ Área.Cosechada.ha. : int 108 274 8 50 70 1093 54 186 34 110 ...
## $ Producción.t. : int 389 3836 80 600 882 5028 680 2046 134 1100 ...
## $ Rendimiento.t.ha. : num 3.6 14 10 12 12.6 4.6 12.6 11 3.9 10 ...
## $ ESTADO.FISICO.PRODUCCION : Factor w/ 1 level "FRUTO FRESCO": 1 1 1 1 1 1 1 1 1 1 ...
# class: clase atómica de una variable
class(mango$Producción.t.)
## [1] "integer"
# dim: función que permite obtener las dimensiones de un arreglo.
# 2081: filas u observaciones.
# 16: columnas o variables.
dim(mango)
## [1] 2081 16
# nrow: función que proporciona el número de filas.
nrow(mango)
## [1] 2081
# ncol: función que proporciona el número de columnas.
ncol(mango)
## [1] 16
# names: función que proporciona el nombre de las variables
names(mango)
## [1] "CÓD..DEP."
## [2] "DEPARTAMENTO"
## [3] "CÓD..MUN."
## [4] "MUNICIPIO"
## [5] "GRUPO.DE.CULTIVO"
## [6] "SUBGRUPO.DE.CULTIVO"
## [7] "CULTIVO"
## [8] "DESAGREGACIÓN.REGIONAL.Y.O.SISTEMA.PRODUCTIVO"
## [9] "CÓDIGO.CULTIVO"
## [10] "NOMBRE.CIENTIFICO"
## [11] "PERIODO"
## [12] "Área.Sembrada.ha."
## [13] "Área.Cosechada.ha."
## [14] "Producción.t."
## [15] "Rendimiento.t.ha."
## [16] "ESTADO.FISICO.PRODUCCION"
# names: también puede ser implementada para editar los nombres de una base de datos.
# c: concatenar o formar vector. En este caso se incorporan en el
#vector tantos nombres como columnas haya en la base de datos.
names(mango) <- c("cod.depto", "depto", "cod.mun", "mpio", "grupo", "subgrupo",
"cultivo", "tipo", "cod.cult", "cientifico", "periodo",
"area.semb", "area.cos", "prodn", "rto", "estado")
# De nuevo se observan los nombres.
names(mango)
## [1] "cod.depto" "depto" "cod.mun" "mpio" "grupo"
## [6] "subgrupo" "cultivo" "tipo" "cod.cult" "cientifico"
## [11] "periodo" "area.semb" "area.cos" "prodn" "rto"
## [16] "estado"
# Operador "[]" para obtener subconjuntos.
# [,]: antes de la coma se indican las filas (número de fila o condicional).
# [,]: después de la coma se indican las columnas (nombre o número de columna)
# Ejempleo [1, ]: filtra la fila 1 con todas las columnas
# Ejempleo [, 1]: filtra la columna 1 con todas las filas
# Ejempleo [, -1]: filtra todas las columnas excepto la 1, con todas las filas.
# Ejempleo [c(1, 5, 10), c(1, 4, 5)]: filtra filas 1, 5 y 10 con las columnas
# 1, 4 y 5.
# mango2: nueva base de datos sin la columna número 1.
# [, -1]: todas las columnas excepto la número 1 y todas las filas.
mango2 <- mango[, -1]
# dimensiones de mango2: "mango2" tiene 15 variables, una menos que "mango"
dim(mango2)
## [1] 2081 15
# filtrar una columna por nombre
mango2.1 <- mango[, "depto"]
# Filtrar las siguientes columnas:
# Departamento - (Posición número 2).
# Tipo: injerto o normal - (Posición número 8).
# Período: años - (Posición número 11).
# Área sembrada - (Posición número 12).
# Área cosechada - (Posición número 13).
# Producción - (Posición número 14).
# Rendimiento - (Posición número 15).
# Filtro por nombre de variable en "mango3"
mango3 <- mango[, c("depto", "tipo", "periodo", "area.semb", "area.cos",
"prodn", "rto")]
# La nueva base de datos sólo tiene las variables indicadas en "mango3"
# head: imprime en pantalla sólo las primeras 6 observaciones de una base de datos
head(mango3)
# Filtro por posición de la variable
mango4 <- mango[, c(2, 8, 11:15)]
# "mango3" y "mango4" son exactamente iguales
head(mango4)
# <: menor
# >: mayor
# <=: menor o igual
# >=: mayor o igual
# ==: igual
# !=: diferente
mango5 <- mango4[mango4$area.semb <= 1000, ]
# &: y
# |: o
mango6 <- mango5[mango5$depto == "ANTIOQUIA" | mango5$depto == "TOLIMA", ]
head(mango6)
# tail: muestra las últimas 6 observaciones de la base de datos
tail(mango6)
mango6.1 <- mango6[mango6$periodo == 2017 & mango6$rto > 20, ]
mango6.1
subset()
# subset: función que permite filtrar filas y columnas
# x: base de datos
# subset: filtro de filas
# select: filtro de columnas
mango6.2 <- subset(x = mango6, subset = periodo == 2017 & rto > 20,
select = -depto)
head(mango6.2)
# sum: función para sumatorias
sum(mango6$prodn)
## [1] 441396
# X: variable numérica
# INDEX: variable categórica (factor)
# FUN: función a ejecutar
tapply(X = mango5$prodn, INDEX = mango5$depto, FUN = sum)
## AMAZONAS ANTIOQUIA ATLANTICO
## 1876 104713 148792
## BOLIVAR BOYACA CALDAS
## 179661 2734 9919
## CASANARE CAUCA CESAR
## 374 26890 78032
## CHOCO CORDOBA CUNDINAMARCA
## 0 111028 411419
## HUILA LA GUAJIRA MAGDALENA
## 16947 16516 242289
## NARIÑO NORTE DE SANTANDER SANTANDER
## 5544 2029 6311
## SUCRE TOLIMA VALLE DEL CAUCA
## 9294 336683 12777
## VICHADA
## 4750
# Nueva variable "rto2" con el operador "$"
mango5$rto2 <- mango5$prodn/mango5$area.cos
head(mango5)
# round: función para redondear números
# x: número o vector de números
# digits: número de dígitos para redondear
round(x = 2.1678, digits = 2)
## [1] 2.17
mango5$rto2 <- round(x = mango5$rto2, digits = 1)
head(mango5)
levels(mango5$depto)
## [1] "AMAZONAS" "ANTIOQUIA" "ATLANTICO"
## [4] "BOLIVAR" "BOYACA" "CALDAS"
## [7] "CASANARE" "CAUCA" "CESAR"
## [10] "CHOCO" "CORDOBA" "CUNDINAMARCA"
## [13] "HUILA" "LA GUAJIRA" "MAGDALENA"
## [16] "NARIÑO" "NORTE DE SANTANDER" "SANTANDER"
## [19] "SUCRE" "TOLIMA" "VALLE DEL CAUCA"
## [22] "VICHADA"
# abline: función que permite añadir líneas a un gráfico
# v: línea vertical
# lwd: ancho de línea
# col: color de línea
# lty: tipo de línea (2 = punteada)
# mean: función para obtener la media
# mean(mango5$rto, na.rm = TRUE): na.rm = TRUE permite calcular la media aún cuando
# existen valores ausentes (vacios o en blanco).
hist(mango5$rto)
abline(v = mean(mango5$rto, na.rm = TRUE), lwd = 1.3, col = "red", lty = 2)
# abline: función que permite añadir líneas a un gráfico
# h: línea horizontal
boxplot(mango5$rto ~ mango5$periodo)
abline(h = mean(mango5$rto, na.rm = TRUE), lwd = 1.2, col = "blue2", lty = 2)
# Horizontal: las = 1
# Vertical: las = 2
boxplot(mango5$rto ~ mango5$depto, las = 2)
# par: función para editar parámetros gráficos
# mar: edición de márgenes del gráfico
# mar = c(abajo, izquierda, arriba, derecha)
# margen inferior: 11
# margen izquierda: 3
# margen superior: 0.7
# margen derecha: 1
boxplot(mango5$rto ~ mango5$depto, las = 2, par(mar = c(11, 3, 0.7, 1)))
# horizontal = TRUE: gráfico horizontal
# horizontal = FALSE: gráfico vertical o normal
boxplot(mango5$rto ~ mango5$periodo, horizontal = TRUE, las = 2,
ylab = "Año")
-Puntos representando el promedio de rendimiento en cada año:
# points: función para adicioanr puntos a un gráfico
# tapply: función para operar por grupos (factores)
# pch = tipo de punto
# col: color del punto
# cex: tamaño del punto
# na.rm = TRUE: posibilita calcular la media en presencia de celdas vacías
boxplot(mango5$rto ~ mango5$periodo, las = 2)
points(tapply(X = mango5$rto, INDEX = mango5$periodo, FUN = mean,
na.rm = TRUE), pch = 19, col = "red", cex = 1)
# lines: agregar línea a un gráfico
# lwd = ancho de línea
boxplot(mango5$rto ~ mango5$periodo, las = 2)
points(tapply(X = mango5$rto, INDEX = mango5$periodo, FUN = mean,
na.rm = TRUE), pch = 19, col = "red", cex = 1)
lines(tapply(X = mango5$rto, INDEX = mango5$periodo, FUN = mean,
na.rm = TRUE), col = "red", lwd = 1)
# legend: permite incorporar etiquetas de guía a un gráfico
# x = 650: ubicación de la leyenda en el eje x
# y = 50: ubicación de la leyenda en el eje y
# legend = c(...): nombres de etiquetas
# fill: color de los puntos de la etiqueta
# title: título de la leyenda
plot(x = mango5$area.semb, y = mango5$rto, col = mango5$tipo)
legend(x = 650, y = 50, legend = c("Mango Normal", "Mango Injerto"),
fill = c("black", "red"), title = "Tipo de mango")
# medias: medias por tipo de mango
# desvios: desviación estándar por tipo de mango
# g1: gráfico de barras
# arrows: permite añadir flechas a un gráfico
medias <- tapply(mango5$rto, mango5$periodo, mean, na.rm = TRUE)
desvios <- tapply(mango5$rto, mango5$periodo, sd, na.rm = TRUE)
g1 <- barplot(medias, las = 2, ylim = c(0, 20))
arrows(x0 = g1, y0 = medias + desvios, y1 = medias - desvios, angle = 90, code = 3,
length = 0.05)