# Fijamos una semilla para que los resultados sean reproducibles (opcional)
set.seed(2026)
# 1. Creamos las variables básicas
id <- paste0("ID_", 1:30)
edad <- sample(18:65, 30, replace = TRUE)
gene <- rep(c(1, 2), each = 15) # 15 mujeres (1) y 15 hombres (2)
trat <- factor(sample(c("A", "B", "C"), 30, replace = TRUE))
# Generamos pesos y estaturas con ligeras diferencias entre sexos para realismo
peso <- c(rnorm(15, 65, 10), rnorm(15, 80, 12)) # Mujeres media 65kg, Hombres 80kg
alt <- c(rnorm(15, 165, 7), rnorm(15, 178, 8)) # Mujeres media 165cm, Hombres 178cm
# Creamos el dataframe original
df_clinico <- data.frame(
Id = id,
Edad = edad,
Gene = gene,
Trat = trat,
Peso = peso,
Alt = alt,
stringsAsFactors = FALSE
)
# Resumen de estructura y estadísticos
str(df_clinico)
## 'data.frame': 30 obs. of 6 variables:
## $ Id : chr "ID_1" "ID_2" "ID_3" "ID_4" ...
## $ Edad: int 46 50 55 62 64 44 61 53 65 22 ...
## $ Gene: num 1 1 1 1 1 1 1 1 1 1 ...
## $ Trat: Factor w/ 3 levels "A","B","C": 3 2 1 2 2 1 1 1 1 1 ...
## $ Peso: num 68.4 66 77.8 81.6 82.8 ...
## $ Alt : num 147 165 162 161 168 ...
summary(df_clinico)
## Id Edad Gene Trat Peso
## Length:30 Min. :20.00 Min. :1.0 A:16 Min. :51.08
## Class :character 1st Qu.:37.25 1st Qu.:1.0 B: 6 1st Qu.:62.35
## Mode :character Median :50.50 Median :1.5 C: 8 Median :72.67
## Mean :47.43 Mean :1.5 Mean :72.66
## 3rd Qu.:59.50 3rd Qu.:2.0 3rd Qu.:82.46
## Max. :65.00 Max. :2.0 Max. :93.32
## Alt
## Min. :146.5
## 1st Qu.:162.8
## Median :168.2
## Mean :169.1
## 3rd Qu.:176.8
## Max. :190.4
# Ver las primeras filas
head(df_clinico)
## Id Edad Gene Trat Peso Alt
## 1 ID_1 46 1 C 68.39008 146.5500
## 2 ID_2 50 1 B 66.04986 165.1446
## 3 ID_3 55 1 A 77.81489 162.0446
## 4 ID_4 62 1 B 81.60042 161.0181
## 5 ID_5 64 1 B 82.76029 167.5377
## 6 ID_6 44 1 A 85.05630 154.9093
# Calculamos el IMC: peso / (estatura en metros)^2
df_clinico$IMC <- df_clinico$Peso / (df_clinico$Alt / 100)^2
# Redondeamos a 2 decimales para que quede limpio
df_clinico$IMC <- round(df_clinico$IMC, 2)
head(df_clinico)
## Id Edad Gene Trat Peso Alt IMC
## 1 ID_1 46 1 C 68.39008 146.5500 31.84
## 2 ID_2 50 1 B 66.04986 165.1446 24.22
## 3 ID_3 55 1 A 77.81489 162.0446 29.63
## 4 ID_4 62 1 B 81.60042 161.0181 31.47
## 5 ID_5 64 1 B 82.76029 167.5377 29.48
## 6 ID_6 44 1 A 85.05630 154.9093 35.44
# Separamos por género
Df_Mujeres <- df_clinico[df_clinico$Gene == 1, ]
Df_Hombres <- df_clinico[df_clinico$Gene == 2, ]
# Verificamos que cada uno tenga 15 observaciones
nrow(Df_Mujeres)
## [1] 15
nrow(Df_Hombres)
## [1] 15
# Combinamos de nuevo
df_recombinado <- rbind(Df_Mujeres, Df_Hombres)
# Comprobamos que volvemos a tener las 30 observaciones
dim(df_recombinado)
## [1] 30 7
# Comparativa rápida de IMC por Género
boxplot(IMC ~ Gene, data = df_recombinado,
names = c("Mujeres", "Hombres"),
main = "Distribución del IMC por Género",
col = c("pink", "lightblue"))
