mean sd data.frame factor
# Ejemplo 1: Sólidos solubrles (°Brix) en pulpa de fruta
brix <- c(10.2,11.5,10.8,12.1,11.7)
brix
## [1] 10.2 11.5 10.8 12.1 11.7
class(brix)
## [1] "numeric"
mean(brix) # Promedio
## [1] 11.26
sd(brix) # Desviación estándar
## [1] 0.7569676
median(brix) # Mediana
## [1] 11.5
max(brix) # Máximo
## [1] 12.1
min(brix) # Mínimo
## [1] 10.2
# Ejemplo 2: Datos con valor faltante
humedad <- c(78.5,80.1,79.4,NA,81.0)
humedad
## [1] 78.5 80.1 79.4 NA 81.0
class(humedad)
## [1] "numeric"
mean(humedad, na.rm = T) # Promedio
## [1] 79.75
sd(humedad, na.rm = T) # Desviación estándar
## [1] 1.059874
humedad_caracter <- c(78.5,80.1,79.4,NA,81.0,"90")
class(humedad_caracter)
## [1] "character"
# Conversión simple: Rendimiento en Kg de pupla útil
peso_fruta <-c(1.2,1.5,1.3,1.4,1.6)
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
# Tipo de fruta procesada
fruta <-c("Mango", "Mango", "Guayaba", "Guayaba", "Mango")
fruta
## [1] "Mango" "Mango" "Guayaba" "Guayaba" "Mango"
class(fruta)
## [1] "character"
# Convertir a factor
fruta_f <-factor(fruta)
class(fruta_f)
## [1] "factor"
levels(fruta_f)
## [1] "Guayaba" "Mango"
table(fruta_f)
## fruta_f
## Guayaba Mango
## 2 3
# Tratamiento de secado
tratamiento <-c("60C","70C","60C","80C","70C","80C")
tratamiento_f <-factor(tratamiento)
levels(tratamiento_f)
## [1] "60C" "70C" "80C"
table(tratamiento_f)
## tratamiento_f
## 60C 70C 80C
## 2 2 2
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 el primero
## [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
brix
## [1] 10.2 11.5 10.8 12.1 11.7
brix[1] # Primer valor
## [1] 10.2
brix[4] # Cuarto valor
## [1] 12.1
brix[-1] # Todos excepto el primero
## [1] 11.5 10.8 12.1 11.7
brix[brix >12] # Valores mayores a 12
## [1] 12.1
brix[brix <10] # Valores menores a 10
## numeric(0)
brix[brix !=10.8] # Valores mayores a 12
## [1] 10.2 11.5 12.1 11.7
temperatura <-seq(from = 40, to = 5000, by = 10)
temperatura
## [1] 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180
## [16] 190 200 210 220 230 240 250 260 270 280 290 300 310 320 330
## [31] 340 350 360 370 380 390 400 410 420 430 440 450 460 470 480
## [46] 490 500 510 520 530 540 550 560 570 580 590 600 610 620 630
## [61] 640 650 660 670 680 690 700 710 720 730 740 750 760 770 780
## [76] 790 800 810 820 830 840 850 860 870 880 890 900 910 920 930
## [91] 940 950 960 970 980 990 1000 1010 1020 1030 1040 1050 1060 1070 1080
## [106] 1090 1100 1110 1120 1130 1140 1150 1160 1170 1180 1190 1200 1210 1220 1230
## [121] 1240 1250 1260 1270 1280 1290 1300 1310 1320 1330 1340 1350 1360 1370 1380
## [136] 1390 1400 1410 1420 1430 1440 1450 1460 1470 1480 1490 1500 1510 1520 1530
## [151] 1540 1550 1560 1570 1580 1590 1600 1610 1620 1630 1640 1650 1660 1670 1680
## [166] 1690 1700 1710 1720 1730 1740 1750 1760 1770 1780 1790 1800 1810 1820 1830
## [181] 1840 1850 1860 1870 1880 1890 1900 1910 1920 1930 1940 1950 1960 1970 1980
## [196] 1990 2000 2010 2020 2030 2040 2050 2060 2070 2080 2090 2100 2110 2120 2130
## [211] 2140 2150 2160 2170 2180 2190 2200 2210 2220 2230 2240 2250 2260 2270 2280
## [226] 2290 2300 2310 2320 2330 2340 2350 2360 2370 2380 2390 2400 2410 2420 2430
## [241] 2440 2450 2460 2470 2480 2490 2500 2510 2520 2530 2540 2550 2560 2570 2580
## [256] 2590 2600 2610 2620 2630 2640 2650 2660 2670 2680 2690 2700 2710 2720 2730
## [271] 2740 2750 2760 2770 2780 2790 2800 2810 2820 2830 2840 2850 2860 2870 2880
## [286] 2890 2900 2910 2920 2930 2940 2950 2960 2970 2980 2990 3000 3010 3020 3030
## [301] 3040 3050 3060 3070 3080 3090 3100 3110 3120 3130 3140 3150 3160 3170 3180
## [316] 3190 3200 3210 3220 3230 3240 3250 3260 3270 3280 3290 3300 3310 3320 3330
## [331] 3340 3350 3360 3370 3380 3390 3400 3410 3420 3430 3440 3450 3460 3470 3480
## [346] 3490 3500 3510 3520 3530 3540 3550 3560 3570 3580 3590 3600 3610 3620 3630
## [361] 3640 3650 3660 3670 3680 3690 3700 3710 3720 3730 3740 3750 3760 3770 3780
## [376] 3790 3800 3810 3820 3830 3840 3850 3860 3870 3880 3890 3900 3910 3920 3930
## [391] 3940 3950 3960 3970 3980 3990 4000 4010 4020 4030 4040 4050 4060 4070 4080
## [406] 4090 4100 4110 4120 4130 4140 4150 4160 4170 4180 4190 4200 4210 4220 4230
## [421] 4240 4250 4260 4270 4280 4290 4300 4310 4320 4330 4340 4350 4360 4370 4380
## [436] 4390 4400 4410 4420 4430 4440 4450 4460 4470 4480 4490 4500 4510 4520 4530
## [451] 4540 4550 4560 4570 4580 4590 4600 4610 4620 4630 4640 4650 4660 4670 4680
## [466] 4690 4700 4710 4720 4730 4740 4750 4760 4770 4780 4790 4800 4810 4820 4830
## [481] 4840 4850 4860 4870 4880 4890 4900 4910 4920 4930 4940 4950 4960 4970 4980
## [496] 4990 5000
plot(temperatura^2,
ylab = "Temperatura (°C",
xlab = "Muestras",
main = "Temperatura de muestras de harinas")
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
# Cambio de factores a algunas columnas
# Ver nombre 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)
# 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
hist(datos$brix)
# Promedio de °Brix
mean(datos$brix)
## [1] 11.925
# Promedio de humedad
mean(datos$humedad)
## [1] 49.9
# Tabla de frecuencias para producto
table(datos$producto)
##
## Guayaba Mango
## 4 4
# Tabla de frecuencias para tratamiento
table(datos$tratamiento)
##
## Control Secado
## 4 4
# Histograma de humedad
hist(datos$humedad,
main = "Distribucción de humedad",
xlab = "Humedad(%)",
col = "lightgreen")
# Boxplot de °Brix por producto
boxplot(brix ~ producto, data = datos,
main = "°Brix por tipo de producto",
xlab = "Fruta",
ylab = "°Brix",
col = "lightyellow")
# Boxplot de humedad de tratamiento
boxplot(humedad ~ tratamiento, data = datos,
main = "Humedad según tratamiento",
xlab = "Tratamiento",
ylab = "Humedad(%)",
col = "lightblue")
# Boxplot de humedad de tratamiento
boxplot(brix ~ producto, data = datos,
main = "°Brix por tipo de producto",
xlab = "Fruta",
ylab = "°Brix",
col = "red")
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
# Ver primeras filas
datos %>%
select(producto, tratamiento, brix)
## producto tratamiento brix
## 1 Mango Control 12.1
## 2 Mango Secado 13.4
## 3 Guayaba Control 10.5
## 4 Guayaba Secado 11.8
## 5 Mango Control 12.7
## 6 Guayaba Secado 11.1
## 7 Mango Secado 13.0
## 8 Guayaba Control 10.8
# Filtrar muestras de mango
datos %>%
filter(producto == "Mango")
## 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 5 Mango Control 12.7 4.1 81.0
## 4 7 Mango Secado 13.0 4.0 17.8
# Filtrar muestras con humedad menor a 30%
datos %>%
filter(humedad < 30)
## muestra producto tratamiento brix ph humedad
## 1 2 Mango Secado 13.4 4.0 18.5
## 2 4 Guayaba Secado 11.8 3.8 20.1
## 3 6 Guayaba Secado 11.1 3.9 19.3
## 4 7 Mango Secado 13.0 4.0 17.8
# Crear nueva variable: relación Brix/pH
datos %>%
mutate(indice_calidad = brix/ph)
## muestra producto tratamiento brix ph humedad indice_calidad
## 1 1 Mango Control 12.1 4.2 82.3 2.880952
## 2 2 Mango Secado 13.4 4.0 18.5 3.350000
## 3 3 Guayaba Control 10.5 3.7 79.8 2.837838
## 4 4 Guayaba Secado 11.8 3.8 20.1 3.105263
## 5 5 Mango Control 12.7 4.1 81.0 3.097561
## 6 6 Guayaba Secado 11.1 3.9 19.3 2.846154
## 7 7 Mango Secado 13.0 4.0 17.8 3.250000
## 8 8 Guayaba Control 10.8 3.8 80.4 2.842105
# Ordenar de mayor a menor °Brix
datos %>%
arrange(desc(brix))
## muestra producto tratamiento brix ph humedad
## 1 2 Mango Secado 13.4 4.0 18.5
## 2 7 Mango Secado 13.0 4.0 17.8
## 3 5 Mango Control 12.7 4.1 81.0
## 4 1 Mango Control 12.1 4.2 82.3
## 5 4 Guayaba Secado 11.8 3.8 20.1
## 6 6 Guayaba Secado 11.1 3.9 19.3
## 7 8 Guayaba Control 10.8 3.8 80.4
## 8 3 Guayaba Control 10.5 3.7 79.8
# Resumen por producto
datos %>%
group_by(producto) %>%
summarise(
n = n(),
brix_prom = mean(brix),
ph_prom = mean(ph),
humedad_prom = mean(humedad)
)
## # A tibble: 2 × 5
## producto n brix_prom ph_prom humedad_prom
## <chr> <int> <dbl> <dbl> <dbl>
## 1 Guayaba 4 11.0 3.8 49.9
## 2 Mango 4 12.8 4.08 49.9
# Resumen por tratamiento
datos %>%
group_by(tratamiento) %>%
summarise(
brix_prom = mean(brix),
humedad_prom = mean(humedad)
)
## # A tibble: 2 × 3
## tratamiento brix_prom humedad_prom
## <chr> <dbl> <dbl>
## 1 Control 11.5 80.9
## 2 Secado 12.3 18.9
# Resumen por producto y tratamiento
datos %>%
group_by(producto, tratamiento) %>%
summarise(
n = n(),
brix_prom = mean(brix),
humedad_prom = mean(humedad),
.groups = "drop"
)
## # A tibble: 4 × 5
## producto tratamiento n brix_prom humedad_prom
## <chr> <chr> <int> <dbl> <dbl>
## 1 Guayaba Control 2 10.6 80.1
## 2 Guayaba Secado 2 11.4 19.7
## 3 Mango Control 2 12.4 81.6
## 4 Mango Secado 2 13.2 18.2
library(tidyr)
# Crear una tabla en formato ancho
datos_ancho <- data.frame(
muestra = 1:4,
brix_inicial = c(10.5, 11.2, 12.1, 10.9),
brix_final = c(12.8, 13.0, 14.2, 12.5),
ph_inicial = c(4.3, 4.1, 4.0, 4.2),
ph_final = c(3.9, 3.8, 3.7, 3.8)
)
datos_ancho
## muestra brix_inicial brix_final ph_inicial ph_final
## 1 1 10.5 12.8 4.3 3.9
## 2 2 11.2 13.0 4.1 3.8
## 3 3 12.1 14.2 4.0 3.7
## 4 4 10.9 12.5 4.2 3.8
# Pasar de formato ancho a largo
datos_largo <- datos_ancho %>%
pivot_longer(
cols = -muestra,
names_to = "variable",
values_to = "valor"
)
datos_largo
## # A tibble: 16 × 3
## muestra variable valor
## <int> <chr> <dbl>
## 1 1 brix_inicial 10.5
## 2 1 brix_final 12.8
## 3 1 ph_inicial 4.3
## 4 1 ph_final 3.9
## 5 2 brix_inicial 11.2
## 6 2 brix_final 13
## 7 2 ph_inicial 4.1
## 8 2 ph_final 3.8
## 9 3 brix_inicial 12.1
## 10 3 brix_final 14.2
## 11 3 ph_inicial 4
## 12 3 ph_final 3.7
## 13 4 brix_inicial 10.9
## 14 4 brix_final 12.5
## 15 4 ph_inicial 4.2
## 16 4 ph_final 3.8
# Separar variable en dos partes
datos_largo %>%
separate(variable, into = c("indicador", "momento"), sep = "_")
## # A tibble: 16 × 4
## muestra indicador momento valor
## <int> <chr> <chr> <dbl>
## 1 1 brix inicial 10.5
## 2 1 brix final 12.8
## 3 1 ph inicial 4.3
## 4 1 ph final 3.9
## 5 2 brix inicial 11.2
## 6 2 brix final 13
## 7 2 ph inicial 4.1
## 8 2 ph final 3.8
## 9 3 brix inicial 12.1
## 10 3 brix final 14.2
## 11 3 ph inicial 4
## 12 3 ph final 3.7
## 13 4 brix inicial 10.9
## 14 4 brix final 12.5
## 15 4 ph inicial 4.2
## 16 4 ph final 3.8
# Ejemplo de formato largo a ancho
datos_tidy <- datos_largo %>%
separate(variable, into = c("indicador", "momento"), sep = "_") %>%
pivot_wider(
names_from = indicador,
values_from = valor
)
datos_tidy
## # A tibble: 8 × 4
## muestra momento brix ph
## <int> <chr> <dbl> <dbl>
## 1 1 inicial 10.5 4.3
## 2 1 final 12.8 3.9
## 3 2 inicial 11.2 4.1
## 4 2 final 13 3.8
## 5 3 inicial 12.1 4
## 6 3 final 14.2 3.7
## 7 4 inicial 10.9 4.2
## 8 4 final 12.5 3.8
# Graficación de resumenes con ggplot2
resumen_producto <- datos %>%
group_by(producto) %>%
summarise(
brix_prom = mean(brix),
humedad_prom = mean(humedad),
.groups = "drop"
)
resumen_producto
## # A tibble: 2 × 3
## producto brix_prom humedad_prom
## <chr> <dbl> <dbl>
## 1 Guayaba 11.0 49.9
## 2 Mango 12.8 49.9