# Ayuda en R
?mean
x <- c(0:10, 50)
x
## [1] 0 1 2 3 4 5 6 7 8 9 10 50
round(mean(x),1)
## [1] 8.8
?sd
round(sd(1:10) ^ 2, 2)
## [1] 9.17
Vector numérico
brix <- c(10.2, 11.5, 10.8, 12.1, 11.7)
# Imprimir brix
brix
## [1] 10.2 11.5 10.8 12.1 11.7
# Clase de vector de brix
class(brix) #como es numérico puedo hacer operaciones matemáticas
## [1] "numeric"
# brix promedio
mean(brix)
## [1] 11.26
# mediana
median(brix)
## [1] 11.5
# máximo
max(brix)
## [1] 12.1
# mínimo
min(brix)
## [1] 10.2
humedad <- c(78.5, 80.1, 79.4, NA, 81)
class(humedad)
## [1] "numeric"
humedad_caracter <- c(78.5, 80.1, 79.4, NA, 81, "90")
class(humedad_caracter)
## [1] "character"
peso_producto <- c(1.2, 1.5, 1.3, 1.4, 1.6) #kg
fraccion_util <- c(0.68, 0.72, 0.70, 0.69, 0.71)
pulpa_util <- peso_producto * fraccion_util
pulpa_util
## [1] 0.816 1.080 0.910 0.966 1.136
mean(pulpa_util)
## [1] 0.9816
producto <- c("Mango", "Guayaba", "Guayaba", "Mango")
producto
## [1] "Mango" "Guayaba" "Guayaba" "Mango"
class(producto)
## [1] "character"
Convertir a factor el caracter anterior
#Convertir a fctor
producto_f <- factor(producto)
class(producto_f)
## [1] "factor"
levels(producto_f)
## [1] "Guayaba" "Mango"
table(producto_f)
## producto_f
## Guayaba Mango
## 2 2
# Temperaturas de secado
tratamiento <- c("60C", "70C", "80C", "60C", "90C", "105C")
tratamiento_f <- factor(tratamiento)
#Promedio
mean(tratamiento_f) #Arroja error porque es un factor
## Warning in mean.default(tratamiento_f): argument is not numeric or logical:
## returning NA
## [1] NA
# Niveles de tratamiento
levels(tratamiento_f)
## [1] "105C" "60C" "70C" "80C" "90C"
#Tabla de frecuencias
table(tratamiento_f)
## tratamiento_f
## 105C 60C 70C 80C 90C
## 1 2 1 1 1
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 primer valor
## [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
pH[pH != 3.6] #Valores distintos a 3.6
## [1] 3.8 4.1 4.3 3.9
temperatura <- seq(from = 40, to = 100, by = 10)
#Ploteo de temperatura al cuadrado
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
# Ver nombres 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)
class(datos)
## [1] "data.frame"
#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
names(datos)
## [1] "muestra" "producto" "tratamiento" "brix" "ph"
## [6] "humedad"
#Promedio de °Brix
mean(datos$brix)
## [1] 11.925
#Promedio de humedad
mean(datos$humedad)
## [1] 49.9
#Tabla de frecuencias para productos
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 = "Distribución de humedad",
xlab = "Humedad (%)",
col = "lightblue")
# Boxplott de °Brix por producto
boxplot(brix ~ producto, data = datos,
main = "°Brix por tipo de producto",
xlab = "Producto",
ylab = "°Brix",
col = "#27F538")
# Boxplot de humedad por tratamiento
boxplot(humedad ~ tratamiento, data = datos,
main = "Humedad según tratamiento",
xlab = "Tratamiento",
ylab = "Humedad (%)",
col = "lightgray")
# Instalar si es necesario:
# install.packages("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
# Ver primeras filas
datos %>% head()
## 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
# Seleccionar columnas
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 %>%
mutate(humedad < 30)
## muestra producto tratamiento brix ph humedad humedad < 30
## 1 1 Mango Control 12.1 4.2 82.3 FALSE
## 2 2 Mango Secado 13.4 4.0 18.5 TRUE
## 3 3 Guayaba Control 10.5 3.7 79.8 FALSE
## 4 4 Guayaba Secado 11.8 3.8 20.1 TRUE
## 5 5 Mango Control 12.7 4.1 81.0 FALSE
## 6 6 Guayaba Secado 11.1 3.9 19.3 TRUE
## 7 7 Mango Secado 13.0 4.0 17.8 TRUE
## 8 8 Guayaba Control 10.8 3.8 80.4 FALSE
# 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(
brix_prom = mean(brix),
ph_prom = mean(ph),
humedad_prom = mean(humedad)
)
## # A tibble: 2 × 4
## producto brix_prom ph_prom humedad_prom
## <chr> <dbl> <dbl> <dbl>
## 1 Guayaba 11.0 3.8 49.9
## 2 Mango 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
# Instalar si es necesario:
# install.packages("tidyr")
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
# Estos resúmenes luego se pueden graficar fácilmente 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