Instrucciones Generales

La matriz de sus datos

La siguiente hoja de cálculo (lo que usualmente llamamos un ‘Excel’) contiene datos del cactus Melocactus intortus en el bosque Seco de Guánica.

Vamos a examinar sus componentes y estructura.

Datos de Melocactus

La estructura de los datos es la siguiente:

Las columnas pueden contener diferentes tipos de datos, como texto, números, fechas, etc., y podemos clasificarlas como:

Algunas recomendaciones sobre la matriz de datos

Creación de un archivo csv

Tanto Excel como GoogleSheets permiten exportar los datos a un archivo csv. La ventaja de la exportación a csv es que es un formato de texto básico que se puede leer en cualquier programa de análisis de datos, como R, Python, etc. Además, es un formato que se puede editar directamente dentro de R Studio.

Dataframe en R

Cargar los datos en R Studio

Los datos que se encuentran en un archivo csv no son accesibles directamente para análisis, primero deben ser cargados en R Studio en una estructura de datos llamada dataframe.

Para cargar los datos en R Studio, se puede usar la función read.csv() o read.csv2() si el archivo csv tiene el separador de decimales como coma.

Vamos a cargar los datos de Melocactus en R Studio.

# usaremos la función read.csv() para cargar los datos
melocactus <- read.csv("labecopob melocactus 20231008 - master.csv")

# ver las primeras filas de los datos
head(melocactus)
##   grupo IDcactus azimut distancia altura long_inflo estado
## 1     1      1-1    327     10.36   45.5        3.5      E
## 2     1      1-2    327     10.36    7.2         NA      S
## 3     1      1-3    327     11.20    8.3         NA      S
## 4     1      1-4    319     11.20    7.5         NA      S
## 5     1      1-5    319     11.20     NA         NA      X
## 6     1      1-6    317      9.50     NA         NA      X

Uso de la función str()

La función str() nos permite ver la estructura de los datos. Nos muestra el tipo de datos de cada columna y las primeras filas de los datos.

str(melocactus)
## 'data.frame':    110 obs. of  7 variables:
##  $ grupo     : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ IDcactus  : chr  "1-1" "1-2" "1-3" "1-4" ...
##  $ azimut    : num  327 327 327 319 319 317 309 266 266 339 ...
##  $ distancia : num  10.4 10.4 11.2 11.2 11.2 ...
##  $ altura    : num  45.5 7.2 8.3 7.5 NA NA NA NA NA 21.2 ...
##  $ long_inflo: num  3.5 NA NA NA NA NA NA NA NA NA ...
##  $ estado    : chr  "E" "S" "S" "S" ...

Uso de la función summary()

La función summary() nos permite ver un resumen de los datos numéricos.

summary(melocactus)
##      grupo         IDcactus             azimut        distancia     
##  Min.   :1.000   Length:110         Min.   : 25.0   Min.   : 0.100  
##  1st Qu.:1.000   Class :character   1st Qu.:114.8   1st Qu.: 9.275  
##  Median :2.000   Mode  :character   Median :239.5   Median :13.060  
##  Mean   :1.609                      Mean   :211.2   Mean   :13.651  
##  3rd Qu.:2.000                      3rd Qu.:307.2   3rd Qu.:20.310  
##  Max.   :2.000                      Max.   :339.0   Max.   :27.500  
##                                                                     
##      altura         long_inflo       estado         
##  Min.   : 0.500   Min.   : 2.00   Length:110        
##  1st Qu.: 2.500   1st Qu.: 5.20   Class :character  
##  Median : 4.400   Median :10.48   Mode  :character  
##  Mean   : 9.583   Mean   :11.03                     
##  3rd Qu.: 9.650   3rd Qu.:17.20                     
##  Max.   :59.000   Max.   :21.00                     
##  NA's   :32       NA's   :101

Uso de la función table()

La función table() nos permite ver la frecuencia de los datos categóricos.

table(melocactus$estado)
## 
##  E  S  X 
##  5 71 34

Uso de la función table() con dos variables

La función table() también se puede usar con dos variables para ver la frecuencia de las combinaciones de las variables.

table(melocactus$estado, melocactus$grupo)
##    
##      1  2
##   E  4  1
##   S 12 59
##   X 27  7

Manejo de los datos con dplyr

El paquete dplyr es un paquete de manipulación de datos que nos permite realizar operaciones comunes de forma sencilla y eficiente.

Vamos a cargar el paquete dplyr y a realizar algunas operaciones con los datos de Melocactus. Si no lo tiene instalado puede hacerlo manualmente mediante Packages -> Install -> dplyr.

# instalar el paquete dplyr
# install.packages("dplyr")

# cargar el paquete dplyr
library(dplyr)
## 
## 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

Seleccionar columnas de interés

Podemos seleccionar solo las columnas de interés para trabajar con ellas.

# seleccionar solo las columnas de interés
melocactus_subset <- melocactus %>%
  select(estado, altura)
head(melocactus_subset)
##   estado altura
## 1      E   45.5
## 2      S    7.2
## 3      S    8.3
## 4      S    7.5
## 5      X     NA
## 6      X     NA

Filtrar los datos

Podemos filtrar las filas de datos que cumplan con ciertas condiciones. Por ejemplo, podemos filtrar los datos para ver solo los individuos de Melocactus que están sanos.

# filtrar los datos
melocactus_sanos <- melocactus %>%
  filter(estado == "S")

Crear nueva columna

Vamos a usar la función mutate() para crear una nueva columna que represente la diferencia entre la altura y la longitud de la inflorescencia.

# crear una nueva columna
melocactus_veg <- melocactus %>%
  mutate(altura_veg = altura - long_inflo)
head(melocactus_veg)
##   grupo IDcactus azimut distancia altura long_inflo estado altura_veg
## 1     1      1-1    327     10.36   45.5        3.5      E         42
## 2     1      1-2    327     10.36    7.2         NA      S         NA
## 3     1      1-3    327     11.20    8.3         NA      S         NA
## 4     1      1-4    319     11.20    7.5         NA      S         NA
## 5     1      1-5    319     11.20     NA         NA      X         NA
## 6     1      1-6    317      9.50     NA         NA      X         NA

Al tener NA en los datos, los operadores matemáticos no funcionan y producen NA como resultados. Vamos a hacer que los NA sean ceros.

# hacer que NA de altura y long_inflo sean ceros
melocactus_veg <- melocactus %>%
  mutate(
    altura = ifelse(is.na(altura), 0, altura),
    long_inflo = ifelse(is.na(long_inflo), 0, long_inflo),
    altura_veg = altura - long_inflo
  )

head(melocactus_veg)
##   grupo IDcactus azimut distancia altura long_inflo estado altura_veg
## 1     1      1-1    327     10.36   45.5        3.5      E       42.0
## 2     1      1-2    327     10.36    7.2        0.0      S        7.2
## 3     1      1-3    327     11.20    8.3        0.0      S        8.3
## 4     1      1-4    319     11.20    7.5        0.0      S        7.5
## 5     1      1-5    319     11.20    0.0        0.0      X        0.0
## 6     1      1-6    317      9.50    0.0        0.0      X        0.0

Agrupar y resumir

Podemos usar la función group_by() para agrupar los datos por una variable y luego usar la función summarise() para resumir los datos. Vamos a agrupar los datos por el estado y calcular la altura promedio.

# agrupar y resumir los datos
melocactus_resumen <- melocactus %>%
  group_by(estado) %>%
  summarise(altura_promedio = mean(altura, na.rm = TRUE))

melocactus_resumen
## # A tibble: 3 × 2
##   estado altura_promedio
##   <chr>            <dbl>
## 1 E                37.4 
## 2 S                 7.39
## 3 X                18.0

Ordenar los datos

Podemos usar la función arrange() para ordenar los datos por una columna específica. Vamos a ordenar los datos por la altura en orden descendente.

# ordenar los datos
melocactus_ordenados <- melocactus %>%
  arrange(desc(altura))

head(melocactus_ordenados)
##   grupo IDcactus azimut distancia altura long_inflo estado
## 1     2      2-1    320      4.60   59.0       16.0      E
## 2     1      1-1    327     10.36   45.5        3.5      E
## 3     2     2-41    240      5.43   45.0       21.0      S
## 4     1     1-39    258     21.53   38.5       17.2      S
## 5     1     1-35    253     11.80   33.3         NA      S
## 6     1     1-22    319     21.20   30.9       17.9      E

Exportar los datos

Una vez que hemos realizado las operaciones necesarias con los datos, podemos exportar los datos modificados a un archivo csv para su uso posterior.

# exportar los datos a un archivo csv
write.csv(melocactus_veg, "melocactus_veg.csv", row.names = FALSE)

Visualización de los datos

La visualización de los datos es una parte importante del análisis de datos. Vamos a usar la librería ggplot2 para crear un gráfico de barras que muestre la altura promedio de los individuos de Melocactus según su estado.

# cargar la librería ggplot2
library(ggplot2)

# crear un gráfico de barras
ggplot(melocactus_resumen, aes(x = estado, y = altura_promedio)) +
  geom_bar(stat = "identity", fill = "skyblue") +
  labs(
       x = "Estado",
       y = "Altura Promedio") +
  theme_minimal()

Figura 1. Altura promedio de los individuos de Melocactus según su estado.

Histograma

Vamos a crear un histograma que muestre la distribución de la altura de los individuos de Melocactus.

# crear un histograma
ggplot(melocactus, aes(x = altura)) +
  geom_histogram(fill = "skyblue", color = "black", bins = 20) +
  labs(
    x = "Altura (cm",
    y = "Frecuencia") +
  theme_minimal()
## Warning: Removed 32 rows containing non-finite outside the scale range
## (`stat_bin()`).

Figura 2. Distribución de la altura de los individuos de Melocactus.

Gráfica de dispersión (‘scatterplot’)

Vamos a crear una gráfica de dispersión que muestre la relación entre la altura y la longitud de la inflorescencia de los individuos de Melocactus.

# crear un diagrama de dispersión
ggplot(melocactus, aes(x = altura, y = long_inflo)) +
  geom_point(color = "skyblue") +
  labs(
    x = "Altura (cm)",
    y = "Longitud de la inflorescencia (cm)") +
  theme_minimal()
## Warning: Removed 101 rows containing missing values or values outside the scale range
## (`geom_point()`).

Figura 3. Relación entre la altura y la longitud de la inflorescencia de los individuos de Melocactus.

Gráfico de caja (‘boxplot’)

Vamos a crear un gráfico de caja que muestre la distribución de la altura de los individuos de Melocactus según su estado.

# crear un gráfico de caja
ggplot(melocactus, aes(x = estado, y = altura, fill = estado)) +
  geom_boxplot() +
  labs(
    x = "Estado",
    y = "Altura (cm)") +
  theme_minimal()
## Warning: Removed 32 rows containing non-finite outside the scale range
## (`stat_boxplot()`).

Figura 4. Distribución de la altura de los individuos de Melocactus según su estado.