#importar la base de datos
myurl="https://raw.githubusercontent.com/armandovl/datasets_uno/main/penguins1.csv"
ping<-read.csv(url(myurl))
#primeros observaciones
head(ping,10)
## species sex island bill_length_mm bill_depth_mm flipper_length_mm
## 1 Adelie male Torgersen 39.1 18.7 181
## 2 Adelie female Torgersen 39.5 17.4 186
## 3 Adelie female Torgersen 40.3 18.0 195
## 4 Adelie Torgersen NA NA NA
## 5 Adelie female Torgersen 36.7 19.3 193
## 6 Adelie male Torgersen 39.3 20.6 190
## 7 Adelie female Torgersen 38.9 17.8 181
## 8 Adelie male Torgersen 39.2 19.6 195
## 9 Adelie Torgersen 34.1 18.1 193
## 10 Adelie Torgersen 42.0 20.2 190
## body_mass_g
## 1 3750
## 2 3800
## 3 3250
## 4 NA
## 5 3450
## 6 3650
## 7 3625
## 8 4675
## 9 3475
## 10 4250
#resumen de la base
summary(ping)
## species sex island bill_length_mm
## Length:344 Length:344 Length:344 Min. :32.10
## Class :character Class :character Class :character 1st Qu.:39.23
## Mode :character Mode :character Mode :character Median :44.45
## Mean :43.92
## 3rd Qu.:48.50
## Max. :59.60
## NA's :2
## bill_depth_mm flipper_length_mm body_mass_g
## Min. :13.10 Min. :172.0 Min. :2700
## 1st Qu.:15.60 1st Qu.:190.0 1st Qu.:3550
## Median :17.30 Median :197.0 Median :4050
## Mean :17.15 Mean :200.9 Mean :4202
## 3rd Qu.:18.70 3rd Qu.:213.0 3rd Qu.:4750
## Max. :21.50 Max. :231.0 Max. :6300
## NA's :2 NA's :2 NA's :2
#ver como se distribuyen los datos creo que pasa en las variables caracteres
table(ping$species)
##
## Adelie Chinstrap Gentoo
## 152 68 124
table(ping$sex)
##
## female male
## 11 165 168
table(ping$island)
##
## Biscoe Dream Torgersen
## 168 124 52
#eliminar las filas de R sex vacias es mejor eliminar cuand son caracteres
ping<-ping[ping$sex!="",]
summary(ping)
## species sex island bill_length_mm
## Length:333 Length:333 Length:333 Min. :32.10
## Class :character Class :character Class :character 1st Qu.:39.50
## Mode :character Mode :character Mode :character Median :44.50
## Mean :43.99
## 3rd Qu.:48.60
## Max. :59.60
## bill_depth_mm flipper_length_mm body_mass_g
## Min. :13.10 Min. :172 Min. :2700
## 1st Qu.:15.60 1st Qu.:190 1st Qu.:3550
## Median :17.30 Median :197 Median :4050
## Mean :17.16 Mean :201 Mean :4207
## 3rd Qu.:18.70 3rd Qu.:213 3rd Qu.:4775
## Max. :21.50 Max. :231 Max. :6300
#convertimos a factores
names<-c("species","island","sex")
ping[,names]<-lapply(ping[,names], factor)
str(ping)
## 'data.frame': 333 obs. of 7 variables:
## $ species : Factor w/ 3 levels "Adelie","Chinstrap",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ sex : Factor w/ 2 levels "female","male": 2 1 1 1 2 1 2 1 2 2 ...
## $ 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 36.7 39.3 38.9 39.2 41.1 38.6 34.6 ...
## $ bill_depth_mm : num 18.7 17.4 18 19.3 20.6 17.8 19.6 17.6 21.2 21.1 ...
## $ flipper_length_mm: int 181 186 195 193 190 181 195 182 191 198 ...
## $ body_mass_g : int 3750 3800 3250 3450 3650 3625 4675 3200 3800 4400 ...
#resumen de descriptivos de la base
summary(ping)
## species sex island bill_length_mm bill_depth_mm
## Adelie :146 female:165 Biscoe :163 Min. :32.10 Min. :13.10
## Chinstrap: 68 male :168 Dream :123 1st Qu.:39.50 1st Qu.:15.60
## Gentoo :119 Torgersen: 47 Median :44.50 Median :17.30
## Mean :43.99 Mean :17.16
## 3rd Qu.:48.60 3rd Qu.:18.70
## Max. :59.60 Max. :21.50
## flipper_length_mm body_mass_g
## Min. :172 Min. :2700
## 1st Qu.:190 1st Qu.:3550
## Median :197 Median :4050
## Mean :201 Mean :4207
## 3rd Qu.:213 3rd Qu.:4775
## Max. :231 Max. :6300
#eliminar nulos
ping<-na.omit(ping)
summary(ping)
## species sex island bill_length_mm bill_depth_mm
## Adelie :146 female:165 Biscoe :163 Min. :32.10 Min. :13.10
## Chinstrap: 68 male :168 Dream :123 1st Qu.:39.50 1st Qu.:15.60
## Gentoo :119 Torgersen: 47 Median :44.50 Median :17.30
## Mean :43.99 Mean :17.16
## 3rd Qu.:48.60 3rd Qu.:18.70
## Max. :59.60 Max. :21.50
## flipper_length_mm body_mass_g
## Min. :172 Min. :2700
## 1st Qu.:190 1st Qu.:3550
## Median :197 Median :4050
## Mean :201 Mean :4207
## 3rd Qu.:213 3rd Qu.:4775
## Max. :231 Max. :6300
str(ping)
## 'data.frame': 333 obs. of 7 variables:
## $ species : Factor w/ 3 levels "Adelie","Chinstrap",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ sex : Factor w/ 2 levels "female","male": 2 1 1 1 2 1 2 1 2 2 ...
## $ 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 36.7 39.3 38.9 39.2 41.1 38.6 34.6 ...
## $ bill_depth_mm : num 18.7 17.4 18 19.3 20.6 17.8 19.6 17.6 21.2 21.1 ...
## $ flipper_length_mm: int 181 186 195 193 190 181 195 182 191 198 ...
## $ body_mass_g : int 3750 3800 3250 3450 3650 3625 4675 3200 3800 4400 ...
#cambiar los nombres
colnames(ping)<-c('especie', 'sexo', 'isla', 'largo_pico', 'ancho_pico', 'largo_aleta','peso_g')
#ver los niveles de la variable sexo
levels(ping$sexo)
## [1] "female" "male"
#cambiar los niveles de la variable sexo al español
levels(ping$sexo)<-c("hembra","macho")
summary(ping)
## especie sexo isla largo_pico ancho_pico
## Adelie :146 hembra:165 Biscoe :163 Min. :32.10 Min. :13.10
## Chinstrap: 68 macho :168 Dream :123 1st Qu.:39.50 1st Qu.:15.60
## Gentoo :119 Torgersen: 47 Median :44.50 Median :17.30
## Mean :43.99 Mean :17.16
## 3rd Qu.:48.60 3rd Qu.:18.70
## Max. :59.60 Max. :21.50
## largo_aleta peso_g
## Min. :172 Min. :2700
## 1st Qu.:190 1st Qu.:3550
## Median :197 Median :4050
## Mean :201 Mean :4207
## 3rd Qu.:213 3rd Qu.:4775
## Max. :231 Max. :6300
#filtrar los de la especie Adeline y Especie Gentoo
datos1<- ping[ping$especie=="Chinstrap"|ping$especie=="Adelie",]
summary(datos1)
## especie sexo isla largo_pico ancho_pico
## Adelie :146 hembra:107 Biscoe : 44 Min. :32.1 Min. :15.50
## Chinstrap: 68 macho :107 Dream :123 1st Qu.:37.8 1st Qu.:17.50
## Gentoo : 0 Torgersen: 47 Median :40.6 Median :18.40
## Mean :42.0 Mean :18.37
## 3rd Qu.:46.0 3rd Qu.:19.10
## Max. :58.0 Max. :21.50
## largo_aleta peso_g
## Min. :172.0 Min. :2700
## 1st Qu.:187.0 1st Qu.:3400
## Median :191.0 Median :3700
## Mean :191.9 Mean :3715
## 3rd Qu.:196.0 3rd Qu.:3994
## Max. :212.0 Max. :4800
#ordenar los datos
#biblio https://r-coder.com/ordenar-r/
datos2<-ping[order(ping$largo_aleta, decreasing = TRUE),]
head(datos2)
## especie sexo isla largo_pico ancho_pico largo_aleta peso_g
## 216 Gentoo macho Biscoe 54.3 15.7 231 5650
## 154 Gentoo macho Biscoe 50.0 16.3 230 5700
## 186 Gentoo macho Biscoe 59.6 17.0 230 6050
## 218 Gentoo macho Biscoe 49.8 16.8 230 5700
## 228 Gentoo macho Biscoe 48.6 16.0 230 5800
## 242 Gentoo macho Biscoe 52.1 17.0 230 5550
#seleccionar columnas menos isla,ancho_pico,
datos3<-ping[,c(1:2,4,6:7),]
head(datos3)
## especie sexo largo_pico largo_aleta peso_g
## 1 Adelie macho 39.1 181 3750
## 2 Adelie hembra 39.5 186 3800
## 3 Adelie hembra 40.3 195 3250
## 5 Adelie hembra 36.7 193 3450
## 6 Adelie macho 39.3 190 3650
## 7 Adelie hembra 38.9 181 3625
#otra forma de seleccionar
datos4<-ping[,c(-3,-5)]
head(datos4)
## especie sexo largo_pico largo_aleta peso_g
## 1 Adelie macho 39.1 181 3750
## 2 Adelie hembra 39.5 186 3800
## 3 Adelie hembra 40.3 195 3250
## 5 Adelie hembra 36.7 193 3450
## 6 Adelie macho 39.3 190 3650
## 7 Adelie hembra 38.9 181 3625
#añadir columna peso en kilos
datos5<-ping
datos5$peso_kg<-ping$peso_g/1000
head(datos5)
## especie sexo isla largo_pico ancho_pico largo_aleta peso_g peso_kg
## 1 Adelie macho Torgersen 39.1 18.7 181 3750 3.750
## 2 Adelie hembra Torgersen 39.5 17.4 186 3800 3.800
## 3 Adelie hembra Torgersen 40.3 18.0 195 3250 3.250
## 5 Adelie hembra Torgersen 36.7 19.3 193 3450 3.450
## 6 Adelie macho Torgersen 39.3 20.6 190 3650 3.650
## 7 Adelie hembra Torgersen 38.9 17.8 181 3625 3.625
media= mean(ping$peso_g)
mediana=median(ping$peso_g)
sprintf("media: %s y mediana: %s", media, mediana)
## [1] "media: 4207.05705705706 y mediana: 4050"
#calcular la media
tapply(ping$peso_g ,ping$especie, mean)
## Adelie Chinstrap Gentoo
## 3706.164 3733.088 5092.437
#calcular la mediana
tapply(ping$peso_g ,ping$especie, median)
## Adelie Chinstrap Gentoo
## 3700 3700 5050
#filtrar
datos10<-ping[ping$especie=="Chinstrap"|ping$especie=="Adelie",]
#ordenar
datos10<-datos10[order(datos10$largo_aleta, decreasing = TRUE),]
#Seleccionar
datos10<-datos10[,c(-3,-5)]
#Añadircolumnas
datos10$peso_kg<-datos10$peso_g/1000
head(datos10)
## especie sexo largo_pico largo_aleta peso_g peso_kg
## 324 Chinstrap macho 49.0 212 4300 4.30
## 130 Adelie macho 44.1 210 4000 4.00
## 314 Chinstrap macho 52.0 210 4800 4.80
## 317 Chinstrap macho 49.0 210 3950 3.95
## 343 Chinstrap macho 50.8 210 4100 4.10
## 96 Adelie macho 40.8 208 4300 4.30
# sacar descriptivos
media= mean(datos10$peso_g)
mediana=median(datos10$peso_g)
sprintf("media: %s y mediana: %s", media, mediana)
## [1] "media: 3714.71962616822 y mediana: 3700"
#estadísticos por grupo
#calcular la media
print("#############MEDIA################ ")
## [1] "#############MEDIA################ "
tapply(datos10$peso_g ,datos10$especie, mean)
## Adelie Chinstrap Gentoo
## 3706.164 3733.088 NA
print("#############MEDIANA################")
## [1] "#############MEDIANA################"
#calcular la mediana
tapply(datos10$peso_g ,datos10$especie, median)
## Adelie Chinstrap Gentoo
## 3700 3700 NA
1.- filter()
2.- arrange()
3.- select()
4.- mutate()
5.- summarise() gropu_by()
6.- pipes %>%
library(dplyr)
datos11<-filter(ping, especie=="Adelie", sexo=="macho")
head(datos11)
## especie sexo isla largo_pico ancho_pico largo_aleta peso_g
## 1 Adelie macho Torgersen 39.1 18.7 181 3750
## 2 Adelie macho Torgersen 39.3 20.6 190 3650
## 3 Adelie macho Torgersen 39.2 19.6 195 4675
## 4 Adelie macho Torgersen 38.6 21.2 191 3800
## 5 Adelie macho Torgersen 34.6 21.1 198 4400
## 6 Adelie macho Torgersen 42.5 20.7 197 4500
#filtrar varias, la coma es igual al &
datos11<-filter(ping, especie=="Adelie"| especie=="Chinstrap", sexo=="macho")
head(datos11)
## especie sexo isla largo_pico ancho_pico largo_aleta peso_g
## 1 Adelie macho Torgersen 39.1 18.7 181 3750
## 2 Adelie macho Torgersen 39.3 20.6 190 3650
## 3 Adelie macho Torgersen 39.2 19.6 195 4675
## 4 Adelie macho Torgersen 38.6 21.2 191 3800
## 5 Adelie macho Torgersen 34.6 21.1 198 4400
## 6 Adelie macho Torgersen 42.5 20.7 197 4500
#el ejemplo era solo filtrar dos especies
datos11<-filter(ping, especie=="Adelie"| especie=="Chinstrap")
head(datos11)
## especie sexo isla largo_pico ancho_pico largo_aleta peso_g
## 1 Adelie macho Torgersen 39.1 18.7 181 3750
## 2 Adelie hembra Torgersen 39.5 17.4 186 3800
## 3 Adelie hembra Torgersen 40.3 18.0 195 3250
## 4 Adelie hembra Torgersen 36.7 19.3 193 3450
## 5 Adelie macho Torgersen 39.3 20.6 190 3650
## 6 Adelie hembra Torgersen 38.9 17.8 181 3625
datos12<-arrange(ping, desc(largo_aleta))
head(datos12)
## especie sexo isla largo_pico ancho_pico largo_aleta peso_g
## 1 Gentoo macho Biscoe 54.3 15.7 231 5650
## 2 Gentoo macho Biscoe 50.0 16.3 230 5700
## 3 Gentoo macho Biscoe 59.6 17.0 230 6050
## 4 Gentoo macho Biscoe 49.8 16.8 230 5700
## 5 Gentoo macho Biscoe 48.6 16.0 230 5800
## 6 Gentoo macho Biscoe 52.1 17.0 230 5550
#solo puede una
datos12<-arrange(ping, desc(largo_aleta))
head(datos12,20)
## especie sexo isla largo_pico ancho_pico largo_aleta peso_g
## 1 Gentoo macho Biscoe 54.3 15.7 231 5650
## 2 Gentoo macho Biscoe 50.0 16.3 230 5700
## 3 Gentoo macho Biscoe 59.6 17.0 230 6050
## 4 Gentoo macho Biscoe 49.8 16.8 230 5700
## 5 Gentoo macho Biscoe 48.6 16.0 230 5800
## 6 Gentoo macho Biscoe 52.1 17.0 230 5550
## 7 Gentoo macho Biscoe 51.5 16.3 230 5500
## 8 Gentoo macho Biscoe 55.1 16.0 230 5850
## 9 Gentoo macho Biscoe 49.5 16.2 229 5800
## 10 Gentoo macho Biscoe 49.8 15.9 229 5950
## 11 Gentoo macho Biscoe 50.8 17.3 228 5600
## 12 Gentoo macho Biscoe 52.2 17.1 228 5400
## 13 Gentoo macho Biscoe 55.9 17.0 228 5600
## 14 Gentoo macho Biscoe 49.1 15.0 228 5500
## 15 Gentoo macho Biscoe 50.8 15.7 226 5200
## 16 Gentoo macho Biscoe 49.6 16.0 225 5700
## 17 Gentoo macho Biscoe 50.5 15.9 225 5400
## 18 Gentoo macho Biscoe 50.1 15.0 225 5000
## 19 Gentoo macho Biscoe 51.1 16.5 225 5250
## 20 Gentoo macho Biscoe 50.4 15.3 224 5550
datos13<-select(ping, -isla,-ancho_pico)
head(datos13)
## especie sexo largo_pico largo_aleta peso_g
## 1 Adelie macho 39.1 181 3750
## 2 Adelie hembra 39.5 186 3800
## 3 Adelie hembra 40.3 195 3250
## 5 Adelie hembra 36.7 193 3450
## 6 Adelie macho 39.3 190 3650
## 7 Adelie hembra 38.9 181 3625
datos14<-ping
datos14<-mutate(datos14, peso_kg=(peso_g/1000),peso_lib=(peso_g*0022))
head(datos14)
## especie sexo isla largo_pico ancho_pico largo_aleta peso_g peso_kg
## 1 Adelie macho Torgersen 39.1 18.7 181 3750 3.750
## 2 Adelie hembra Torgersen 39.5 17.4 186 3800 3.800
## 3 Adelie hembra Torgersen 40.3 18.0 195 3250 3.250
## 5 Adelie hembra Torgersen 36.7 19.3 193 3450 3.450
## 6 Adelie macho Torgersen 39.3 20.6 190 3650 3.650
## 7 Adelie hembra Torgersen 38.9 17.8 181 3625 3.625
## peso_lib
## 1 82500
## 2 83600
## 3 71500
## 5 75900
## 6 80300
## 7 79750
datos15<-summarise(ping,media=mean(largo_pico), mediana=median(largo_pico))
print(datos15)
## media mediana
## 1 43.99279 44.5
datos16<-summarise(group_by(ping,isla),media=mean(largo_pico), mediana=median(largo_pico))
print(datos16)
## # A tibble: 3 x 3
## isla media mediana
## <fct> <dbl> <dbl>
## 1 Biscoe 45.2 45.8
## 2 Dream 44.2 45.2
## 3 Torgersen 39.0 39
#pimera forma solo filtros
ping %>%
filter(especie=="Adelie"|especie=="Chinstrap", sexo=="macho")%>%
arrange(desc(largo_aleta))%>%
select(-isla,-ancho_pico)%>%
mutate(peso_kg=(peso_g/1000),peso_lb=(peso_g)*0.0022)%>%
summary() #se puede aplicar cualquier funcion incluso graficar
## especie sexo largo_pico largo_aleta peso_g
## Adelie :73 hembra: 0 Min. :34.60 Min. :178.0 Min. :3250
## Chinstrap:34 macho :107 1st Qu.:39.70 1st Qu.:190.0 1st Qu.:3775
## Gentoo : 0 Median :41.50 Median :195.0 Median :3975
## Mean :43.79 Mean :194.8 Mean :4010
## 3rd Qu.:49.65 3rd Qu.:199.0 3rd Qu.:4262
## Max. :55.80 Max. :212.0 Max. :4800
## peso_kg peso_lb
## Min. :3.250 Min. : 7.150
## 1st Qu.:3.775 1st Qu.: 8.305
## Median :3.975 Median : 8.745
## Mean :4.010 Mean : 8.823
## 3rd Qu.:4.263 3rd Qu.: 9.377
## Max. :4.800 Max. :10.560
#segunda forma con estadísticos de una variables
ping %>%
filter(especie=="Adelie"|especie=="Chinstrap", sexo=="macho")%>%
arrange(desc(largo_aleta))%>%
select(-isla,-ancho_pico)%>%
mutate(peso_kg=(peso_g/1000),peso_lb=(peso_g)*0.0022)%>%
summarise(mean(peso_kg))
## mean(peso_kg)
## 1 4.01028
#tercera forma con estadísticos de una variables agrupadas
ping %>%
filter(especie=="Adelie"|especie=="Chinstrap", sexo=="macho")%>%
arrange(desc(largo_aleta))%>%
select(-isla,-ancho_pico)%>%
mutate(peso_kg=(peso_g/1000),peso_lb=(peso_g)*0.0022)%>%
group_by(especie)%>%
summarise(media=mean(peso_kg), mediana=median(peso_kg),sd(peso_kg))
## # A tibble: 2 x 4
## especie media mediana `sd(peso_kg)`
## <fct> <dbl> <dbl> <dbl>
## 1 Adelie 4.04 4 0.347
## 2 Chinstrap 3.94 3.95 0.362
#conteo de variables
ping%>%
count(especie,isla)
## especie isla n
## 1 Adelie Biscoe 44
## 2 Adelie Dream 55
## 3 Adelie Torgersen 47
## 4 Chinstrap Dream 68
## 5 Gentoo Biscoe 119
#es el mismo que el de arriba
ping%>%
group_by(especie)%>%
count(isla)
## # A tibble: 5 x 3
## # Groups: especie [3]
## especie isla n
## <fct> <fct> <int>
## 1 Adelie Biscoe 44
## 2 Adelie Dream 55
## 3 Adelie Torgersen 47
## 4 Chinstrap Dream 68
## 5 Gentoo Biscoe 119
#conteo de variables multiples
ping%>%
count(especie,isla,sexo)
## especie isla sexo n
## 1 Adelie Biscoe hembra 22
## 2 Adelie Biscoe macho 22
## 3 Adelie Dream hembra 27
## 4 Adelie Dream macho 28
## 5 Adelie Torgersen hembra 24
## 6 Adelie Torgersen macho 23
## 7 Chinstrap Dream hembra 34
## 8 Chinstrap Dream macho 34
## 9 Gentoo Biscoe hembra 58
## 10 Gentoo Biscoe macho 61
#cuarta forma guardar en una variable
datos20 <-ping %>%
filter(especie=="Adelie"|especie=="Chinstrap", sexo=="macho")%>%
arrange(desc(largo_aleta))%>%
select(-isla,-ancho_pico)%>%
mutate(peso_kg=(peso_g/1000),peso_lb=(peso_g)*0.0022)
head(datos20,10)
## especie sexo largo_pico largo_aleta peso_g peso_kg peso_lb
## 1 Chinstrap macho 49.0 212 4300 4.30 9.46
## 2 Adelie macho 44.1 210 4000 4.00 8.80
## 3 Chinstrap macho 52.0 210 4800 4.80 10.56
## 4 Chinstrap macho 49.0 210 3950 3.95 8.69
## 5 Chinstrap macho 50.8 210 4100 4.10 9.02
## 6 Adelie macho 40.8 208 4300 4.30 9.46
## 7 Chinstrap macho 55.8 207 4000 4.00 8.80
## 8 Chinstrap macho 51.9 206 3950 3.95 8.69
## 9 Adelie macho 41.1 205 4300 4.30 9.46
## 10 Chinstrap macho 52.8 205 4550 4.55 10.01