remove(list = ls())

#Objetivo: Utilizar el conjunto de datos penguins de la biblioteca
# palmerpenguins para realizar análisis de datos básicos y avanzados en R.

#Preparacion

#install.packages("palmerpenguins")
library(palmerpenguins)
help("palmerpenguins-package")
## starting httpd help server ... done
data(penguins)



# 1. EXPLORACION INICIAL ####
# *****************************************************
#*Mostrar las primeras 6 filas del conjunto de datos "penguins"
#*Uso de la utilidad head()

head(penguins)
##   species    island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
## 1  Adelie Torgersen           39.1          18.7               181        3750
## 2  Adelie Torgersen           39.5          17.4               186        3800
## 3  Adelie Torgersen           40.3          18.0               195        3250
## 4  Adelie Torgersen             NA            NA                NA          NA
## 5  Adelie Torgersen           36.7          19.3               193        3450
## 6  Adelie Torgersen           39.3          20.6               190        3650
##      sex year
## 1   male 2007
## 2 female 2007
## 3 female 2007
## 4   <NA> 2007
## 5 female 2007
## 6   male 2007
#* Las columnas disponibles para el análisis de estos datos es de:*
#* species 
#* island 
#* bill_length_mm
#* bill_depth_mm
#* flipper_length_mm
#* body_mass_g
#* sex
#* year

# Usar funcion str()
str(penguins)
## 'data.frame':    344 obs. of  8 variables:
##  $ species          : Factor w/ 3 levels "Adelie","Chinstrap",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ island           : Factor w/ 3 levels "Biscoe","Dream",..: 3 3 3 3 3 3 3 3 3 3 ...
##  $ bill_length_mm   : num  39.1 39.5 40.3 NA 36.7 39.3 38.9 39.2 34.1 42 ...
##  $ bill_depth_mm    : num  18.7 17.4 18 NA 19.3 20.6 17.8 19.6 18.1 20.2 ...
##  $ flipper_length_mm: int  181 186 195 NA 193 190 181 195 193 190 ...
##  $ body_mass_g      : int  3750 3800 3250 NA 3450 3650 3625 4675 3475 4250 ...
##  $ sex              : Factor w/ 2 levels "female","male": 2 1 1 NA 1 2 1 2 NA NA ...
##  $ year             : int  2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 ...
# Tiene 8 variables y 344 observaciones.




# 2. DOCUMENTACION Y AYUDA ####
# ****************************************************
#* Utiliza la función help() o ?penguins para leer sobre el conjunto de datos penguins. ¿Qué representa cada columna?

help("penguins")
# Penguins de la data de palmerpenguins es la medida de pinguinos cerca de Palmer Station en la antartida
# Cada columna representa:
# species: La clasificacion entre Adelie, Chinstrap y Gentoo
# island: La isal en la que habitan
# bill_length_mm: Indicador de la longitud del pico en milimetros
# flipper_length_mm: Indicador de las aletas en milimetros
# body_mass_g: Indicador del peso corporal en gramos
# sex: Idicador de si las observaciones de la muestra son hembras o machos
# year: El año en el que fueron estudiados




# 3. RESUMEN ESTADISTICO ####
# ****************************************************
#*Aplica la función summary() para obtener un resumen estadístico de todas las columnas en penguins.
summary(penguins)
##       species          island    bill_length_mm  bill_depth_mm  
##  Adelie   :152   Biscoe   :168   Min.   :32.10   Min.   :13.10  
##  Chinstrap: 68   Dream    :124   1st Qu.:39.23   1st Qu.:15.60  
##  Gentoo   :124   Torgersen: 52   Median :44.45   Median :17.30  
##                                  Mean   :43.92   Mean   :17.15  
##                                  3rd Qu.:48.50   3rd Qu.:18.70  
##                                  Max.   :59.60   Max.   :21.50  
##                                  NA's   :2       NA's   :2      
##  flipper_length_mm  body_mass_g       sex           year     
##  Min.   :172.0     Min.   :2700   female:165   Min.   :2007  
##  1st Qu.:190.0     1st Qu.:3550   male  :168   1st Qu.:2007  
##  Median :197.0     Median :4050   NA's  : 11   Median :2008  
##  Mean   :200.9     Mean   :4202                Mean   :2008  
##  3rd Qu.:213.0     3rd Qu.:4750                3rd Qu.:2009  
##  Max.   :231.0     Max.   :6300                Max.   :2009  
##  NA's   :2         NA's   :2
# 4. ACCESO A NOMBRES DE FILAS Y COLUMAS ####
# **************************************************
colnames(penguins)
## [1] "species"           "island"            "bill_length_mm"   
## [4] "bill_depth_mm"     "flipper_length_mm" "body_mass_g"      
## [7] "sex"               "year"
colnames(mtcars)
##  [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear"
## [11] "carb"
# Que uno da caracteristicas de autos y el otro de pinguinos.




# 5. FILTRADO DE DATOS ####
# *****************************************************

#Crea un nuevo dataframe que contenga solo los pingüinos con masa corporal mayor a 4000 gramos.
penguin_over_4000grams <- subset(penguins, body_mass_g > 4000)

#Filtra el conjunto de datos para obtener solo los pingüinos de la especie "Adelie".
Adelies <- subset(penguins, species == "Adelie")





# 6. SELECCION DE COLUMNAS ESPECIFICAS ####
# *****************************************************
#Selecciona y muestra solo las columnas species, bill_length_mm, y bill_depth_mm del conjunto de datos penguins.
Datos_pico <- penguins[, c("bill_length_mm", "bill_depth_mm")]





# 7. ORDENACION DE DATOS ####
# *****************************************************
# Ordena el conjunto de datos penguins por flipper_length_mm en orden ascendente.
penguins_flipperlenghtmm_ascendente <- penguins[order
                      (penguins$flipper_length_mm), ]
# Ordena penguins por body_mass_g en orden descendente.
penguins_flipperlenghtmm_descendente <- penguins[order
                                                (-penguins$flipper_length_mm), ]



# 8. CREACION DE NUEVAS VARIABLES ####
# *****************************************************
#Añade una nueva columna llamada flipper_length_cm que sea el resultado de convertir flipper_length_mm a centímetros.
penguins$flipper_length_cm <- penguins$flipper_length_mm /10

#Calcula el índice de masa corporal (IMC) para los pingüinos usando la fórmula body_mass_g / (flipper_length_mm/10)^2 y añade esta nueva columna al dataframe.
penguins$IMC <- penguins$body_mass_g / (penguins$flipper_length_mm/10)^2




# 9. AGRUPACION Y RESUMEN ####
# *****************************************************
#Divide el conjunto de datos en grupos según la especie (species) y calcula la media de la masa corporal para cada grupo

Media_masa_corporal <- aggregate(body_mass_g ~ species,
                                 data = penguins, FUN = mean)
print(Media_masa_corporal)
##     species body_mass_g
## 1    Adelie    3700.662
## 2 Chinstrap    3733.088
## 3    Gentoo    5076.016
# 10. DESAFIOS FINALES####
# *****************************************************
#Calcula la mediana de la longitud del pico (bill_length_mm) para cada especie.
mediana_picos <- aggregate(bill_length_mm ~ species,
                                 data = penguins, FUN = median)


#Encuentra la especie que tiene la mayor longitud media del pico. Usa agrupación y resumen para hacer este cálculo.
Gentoo <- subset(penguins, species == "Gentoo")
Chinstrap <- subset(penguins, species == "Chinstrap")

PicosAdelie <- mean(Adelies$bill_length_mm)
#View(PicosAdelie)

PicosGentoo <- mean(Gentoo$bill_length_mm)
#View(PicosGentoo)

PicosChinstrap <- mean(Chinstrap$bill_length_mm)
#View(PicosChinstrap)

# *******************************************************************************