2 Preprocesamiento de datos
2.1 Ejercicios Resueltos
Para la realización de esta práctica se requieren los paquetes readr
y dplyr
de la colección de paquetes tidyverse
.
Ejercicio 2.1 La siguiente tabla contiene los ingresos y gastos de una empresa durante el primer trimestre del año.
Mes | Ingresos | Gastos | Impuestos |
---|---|---|---|
Enero | 45000 | 33400 | 6450 |
Febrero | 41500 | 35400 | 6300 |
Marzo | 51200 | 35600 | 7100 |
-
Crear un data frame con los datos de la tabla.
Solucióndf <- data.frame( Mes = c("Enero", "Febrero", "Marzo"), Ingresos = c(45000, 41500, 51200), Gastos = c(33400, 35400, 35600) ) df
Mes Ingresos Gastos 1 Enero 45000 33400 2 Febrero 41500 35400 3 Marzo 51200 35600
-
Añadir una nueva columna con los siguientes impuestos pagados.
Mes Impuestos Enero 6450 Febrero 6300 Marzo 7100 Solución 1Con las funciones básicas de R.
df$Impuestos <- c(6450, 6300, 7100) df
Mes Ingresos Gastos Impuestos 1 Enero 45000 33400 6450 2 Febrero 41500 35400 6300 3 Marzo 51200 35600 7100
-
Añadir una nueva fila con los siguientes datos de Abril.
Mes Ingresos Gastos Impuestos Abril 49700 36300 6850 Solución 1Solución 2Con las funciones del paquete
dplyr
.df <- df |> add_row(Mes = "Abril", Ingresos = 49700, Gastos = 36300, Impuestos = 6850) df
Mes Ingresos Gastos Impuestos 1 Enero 45000 33400 6450 2 Febrero 41500 35400 6300 3 Marzo 51200 35600 7100 4 Abril 49700 36300 6850
-
Cambiar los ingresos de Marzo por 50400.
Solucióndf[3, "Ingresos"] <- 50400 df
Mes Ingresos Gastos Impuestos 1 Enero 45000 33400 6450 2 Febrero 41500 35400 6300 3 Marzo 50400 35600 7100 4 Abril 49700 36300 6850
-
Crear una nueva columna con los beneficios de cada mes (ingresos - gastos - impuestos).
Solución 1Con las funciones básicas de R.
df$Beneficios <- df$Ingresos - df$Gastos - df$Impuestos df
Mes Ingresos Gastos Impuestos Beneficios 1 Enero 45000 33400 6450 5150 2 Febrero 41500 35400 6300 -200 3 Marzo 50400 35600 7100 7700 4 Abril 49700 36300 6850 6550
Solución 2Con las funciones del paquete
dplyr
.df <- df |> mutate(Beneficios = Ingresos - Gastos - Impuestos) df
Mes Ingresos Gastos Impuestos Beneficios 1 Enero 45000 33400 6450 5150 2 Febrero 41500 35400 6300 -200 3 Marzo 50400 35600 7100 7700 4 Abril 49700 36300 6850 6550
-
Crear una nueva columna con el factor
Balance
con dos posibles categorías:positivo
si ha habido beneficios ynegativo
si ha habido pérdidas.Solución 1Con las funciones básicas de R.
Mes Ingresos Gastos Impuestos Beneficios Balance 1 Enero 45000 33400 6450 5150 positivo 2 Febrero 41500 35400 6300 -200 negativo 3 Marzo 50400 35600 7100 7700 positivo 4 Abril 49700 36300 6850 6550 positivo
Solución 2Con las funciones del paquete
dplyr
.df <- df |> mutate(Balance = cut(Beneficios, breaks = c(-Inf, 0, Inf), labels = c("negativo", "positivo"))) df
Mes Ingresos Gastos Impuestos Beneficios Balance 1 Enero 45000 33400 6450 5150 positivo 2 Febrero 41500 35400 6300 -200 negativo 3 Marzo 50400 35600 7100 7700 positivo 4 Abril 49700 36300 6850 6550 positivo
-
Filtrar el conjunto de datos para quedarse con los nombres de los meses y los beneficios de los meses con balance positivo.
Solución 1Con las funciones básicas de R.
df[df$Balance == "positivo", c("Mes", "Beneficios")]
Mes Beneficios 1 Enero 5150 3 Marzo 7700 4 Abril 6550
Ejercicio 2.2 El fichero colesterol.csv
contiene información de una muestra de pacientes donde se han medido la edad, el sexo, el peso, la altura y el nivel de colesterol, además de su nombre.
-
Crear un data frame con los datos de todos los pacientes del estudio a partir del fichero
colesterol.csv
.Solución 1Con las funciones básicas de R.
df <- read.csv("https://raw.githubusercontent.com/asalber/estadistica-practicas-r/main/datos/colesterol.csv")
Solución 2Con la función
read_csv
del paquete del paquetereadr
.df <- read_csv("https://raw.githubusercontent.com/asalber/estadistica-practicas-r/main/datos/colesterol.csv")
Rows: 14 Columns: 6 ── Column specification ──────────────────────────────────────────────────────── Delimiter: "," chr (2): nombre, sexo dbl (4): edad, peso, altura, colesterol ℹ Use `spec()` to retrieve the full column specification for this data. ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
-
Mostrar el contenido del data frame.
Solución 1Con las funciones básicas de R.
df
# A tibble: 14 × 6 nombre edad sexo peso altura colesterol <chr> <dbl> <chr> <dbl> <dbl> <dbl> 1 José Luis Martínez Izquierdo 18 H 85 1.79 182 2 Rosa Díaz Díaz 32 M 65 1.73 232 3 Javier García Sánchez 24 H NA 1.81 191 4 Carmen López Pinzón 35 M 65 1.7 200 5 Marisa López Collado 46 M 51 1.58 148 6 Antonio Ruiz Cruz 68 H 66 1.74 249 7 Antonio Fernández Ocaña 51 H 62 1.72 276 8 Pilar Martín González 22 M 60 1.66 NA 9 Pedro Gálvez Tenorio 35 H 90 1.94 241 10 Santiago Reillo Manzano 46 H 75 1.85 280 11 Macarena Álvarez Luna 53 M 55 1.62 262 12 José María de la Guía Sanz 58 H 78 1.87 198 13 Miguel Angel Cuadrado Gutiérrez 27 H 109 1.98 210 14 Carolina Rubio Moreno 20 M 61 1.77 194
Solución 2Con la función
glimpse
del paquetedplyr
. Esta función muestra las columnas del data frame en filas, de manera que permite ver todas las columnas de un data frame cuando este tiene muchas columnas.glimpse(df)
Rows: 14 Columns: 6 $ nombre <chr> "José Luis Martínez Izquierdo", "Rosa Díaz Díaz", "Javier G… $ edad <dbl> 18, 32, 24, 35, 46, 68, 51, 22, 35, 46, 53, 58, 27, 20 $ sexo <chr> "H", "M", "H", "M", "M", "H", "H", "M", "H", "H", "M", "H",… $ peso <dbl> 85, 65, NA, 65, 51, 66, 62, 60, 90, 75, 55, 78, 109, 61 $ altura <dbl> 1.79, 1.73, 1.81, 1.70, 1.58, 1.74, 1.72, 1.66, 1.94, 1.85,… $ colesterol <dbl> 182, 232, 191, 200, 148, 249, 276, NA, 241, 280, 262, 198, …
-
Crear una nueva columna con el índice de masa corporal, usando la siguiente fórmula
\[ \mbox{IMC} = \frac{\mbox{Peso (kg)}}{\mbox{Altura (cm)}^2} \]
Solución# A tibble: 14 × 7 nombre edad sexo peso altura colesterol imc <chr> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> 1 José Luis Martínez Izquierdo 18 H 85 1.79 182 27 2 Rosa Díaz Díaz 32 M 65 1.73 232 22 3 Javier García Sánchez 24 H NA 1.81 191 NA 4 Carmen López Pinzón 35 M 65 1.7 200 22 5 Marisa López Collado 46 M 51 1.58 148 20 6 Antonio Ruiz Cruz 68 H 66 1.74 249 22 7 Antonio Fernández Ocaña 51 H 62 1.72 276 21 8 Pilar Martín González 22 M 60 1.66 NA 22 9 Pedro Gálvez Tenorio 35 H 90 1.94 241 24 10 Santiago Reillo Manzano 46 H 75 1.85 280 22 11 Macarena Álvarez Luna 53 M 55 1.62 262 21 12 José María de la Guía Sanz 58 H 78 1.87 198 22 13 Miguel Angel Cuadrado Gutiérrez 27 H 109 1.98 210 28 14 Carolina Rubio Moreno 20 M 61 1.77 194 19
-
Crear una nueva columna con la variable
obesidad
recodificando la columnaimc
en las siguientes categorías.Rango IMC Categoría Menor de 18.5 Bajo peso De 18.5 a 24.5 Saludable De 24.5 a 30 Sobrepeso Mayor de 30 Obeso Solucióndf <- df |> mutate(Obesidad = cut(imc, breaks = c(0, 18.5, 24.5, 30, Inf), labels = c("Bajo peso", "Saludable", "Sobrepeso", "Obeso"))) df
# A tibble: 14 × 8 nombre edad sexo peso altura colesterol imc Obesidad <chr> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <fct> 1 José Luis Martínez Izquie… 18 H 85 1.79 182 27 Sobrepe… 2 Rosa Díaz Díaz 32 M 65 1.73 232 22 Saludab… 3 Javier García Sánchez 24 H NA 1.81 191 NA <NA> 4 Carmen López Pinzón 35 M 65 1.7 200 22 Saludab… 5 Marisa López Collado 46 M 51 1.58 148 20 Saludab… 6 Antonio Ruiz Cruz 68 H 66 1.74 249 22 Saludab… 7 Antonio Fernández Ocaña 51 H 62 1.72 276 21 Saludab… 8 Pilar Martín González 22 M 60 1.66 NA 22 Saludab… 9 Pedro Gálvez Tenorio 35 H 90 1.94 241 24 Saludab… 10 Santiago Reillo Manzano 46 H 75 1.85 280 22 Saludab… 11 Macarena Álvarez Luna 53 M 55 1.62 262 21 Saludab… 12 José María de la Guía Sanz 58 H 78 1.87 198 22 Saludab… 13 Miguel Angel Cuadrado Gut… 27 H 109 1.98 210 28 Sobrepe… 14 Carolina Rubio Moreno 20 M 61 1.77 194 19 Saludab…
-
Seleccionar las columnas
nombre
,sexo
yedad
.Solucióndf |> select(nombre, sexo, edad)
# A tibble: 14 × 3 nombre sexo edad <chr> <chr> <dbl> 1 José Luis Martínez Izquierdo H 18 2 Rosa Díaz Díaz M 32 3 Javier García Sánchez H 24 4 Carmen López Pinzón M 35 5 Marisa López Collado M 46 6 Antonio Ruiz Cruz H 68 7 Antonio Fernández Ocaña H 51 8 Pilar Martín González M 22 9 Pedro Gálvez Tenorio H 35 10 Santiago Reillo Manzano H 46 11 Macarena Álvarez Luna M 53 12 José María de la Guía Sanz H 58 13 Miguel Angel Cuadrado Gutiérrez H 27 14 Carolina Rubio Moreno M 20
-
Anonimizar los datos eliminando la columna
nombre
.Solucióndf |> select(-nombre)
# A tibble: 14 × 7 edad sexo peso altura colesterol imc Obesidad <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <fct> 1 18 H 85 1.79 182 27 Sobrepeso 2 32 M 65 1.73 232 22 Saludable 3 24 H NA 1.81 191 NA <NA> 4 35 M 65 1.7 200 22 Saludable 5 46 M 51 1.58 148 20 Saludable 6 68 H 66 1.74 249 22 Saludable 7 51 H 62 1.72 276 21 Saludable 8 22 M 60 1.66 NA 22 Saludable 9 35 H 90 1.94 241 24 Saludable 10 46 H 75 1.85 280 22 Saludable 11 53 M 55 1.62 262 21 Saludable 12 58 H 78 1.87 198 22 Saludable 13 27 H 109 1.98 210 28 Sobrepeso 14 20 M 61 1.77 194 19 Saludable
-
Reordenar las columnas poniendo la columna
sexo
antes que la columnaedad
.Solucióndf |> select(nombre, sexo, edad, everything())
# A tibble: 14 × 8 nombre sexo edad peso altura colesterol imc Obesidad <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <fct> 1 José Luis Martínez Izquie… H 18 85 1.79 182 27 Sobrepe… 2 Rosa Díaz Díaz M 32 65 1.73 232 22 Saludab… 3 Javier García Sánchez H 24 NA 1.81 191 NA <NA> 4 Carmen López Pinzón M 35 65 1.7 200 22 Saludab… 5 Marisa López Collado M 46 51 1.58 148 20 Saludab… 6 Antonio Ruiz Cruz H 68 66 1.74 249 22 Saludab… 7 Antonio Fernández Ocaña H 51 62 1.72 276 21 Saludab… 8 Pilar Martín González M 22 60 1.66 NA 22 Saludab… 9 Pedro Gálvez Tenorio H 35 90 1.94 241 24 Saludab… 10 Santiago Reillo Manzano H 46 75 1.85 280 22 Saludab… 11 Macarena Álvarez Luna M 53 55 1.62 262 21 Saludab… 12 José María de la Guía Sanz H 58 78 1.87 198 22 Saludab… 13 Miguel Angel Cuadrado Gut… H 27 109 1.98 210 28 Sobrepe… 14 Carolina Rubio Moreno M 20 61 1.77 194 19 Saludab…
-
Filtrar el data frame para quedarse con las mujeres.
Solucióndf |> filter(sexo == "M")
# A tibble: 6 × 8 nombre edad sexo peso altura colesterol imc Obesidad <chr> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <fct> 1 Rosa Díaz Díaz 32 M 65 1.73 232 22 Saludable 2 Carmen López Pinzón 35 M 65 1.7 200 22 Saludable 3 Marisa López Collado 46 M 51 1.58 148 20 Saludable 4 Pilar Martín González 22 M 60 1.66 NA 22 Saludable 5 Macarena Álvarez Luna 53 M 55 1.62 262 21 Saludable 6 Carolina Rubio Moreno 20 M 61 1.77 194 19 Saludable
-
Filtrar el data frame para quedarse con los hombres mayores de 30 años.
Solucióndf |> filter( sexo == "H" & edad > 30)
# A tibble: 5 × 8 nombre edad sexo peso altura colesterol imc Obesidad <chr> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <fct> 1 Antonio Ruiz Cruz 68 H 66 1.74 249 22 Saludable 2 Antonio Fernández Ocaña 51 H 62 1.72 276 21 Saludable 3 Pedro Gálvez Tenorio 35 H 90 1.94 241 24 Saludable 4 Santiago Reillo Manzano 46 H 75 1.85 280 22 Saludable 5 José María de la Guía Sanz 58 H 78 1.87 198 22 Saludable
-
Filtrar el data frame para eliminar las filas con datos perdidos en la columna
colesterol
.Solución# A tibble: 13 × 8 nombre edad sexo peso altura colesterol imc Obesidad <chr> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <fct> 1 José Luis Martínez Izquie… 18 H 85 1.79 182 27 Sobrepe… 2 Rosa Díaz Díaz 32 M 65 1.73 232 22 Saludab… 3 Javier García Sánchez 24 H NA 1.81 191 NA <NA> 4 Carmen López Pinzón 35 M 65 1.7 200 22 Saludab… 5 Marisa López Collado 46 M 51 1.58 148 20 Saludab… 6 Antonio Ruiz Cruz 68 H 66 1.74 249 22 Saludab… 7 Antonio Fernández Ocaña 51 H 62 1.72 276 21 Saludab… 8 Pedro Gálvez Tenorio 35 H 90 1.94 241 24 Saludab… 9 Santiago Reillo Manzano 46 H 75 1.85 280 22 Saludab… 10 Macarena Álvarez Luna 53 M 55 1.62 262 21 Saludab… 11 José María de la Guía Sanz 58 H 78 1.87 198 22 Saludab… 12 Miguel Angel Cuadrado Gut… 27 H 109 1.98 210 28 Sobrepe… 13 Carolina Rubio Moreno 20 M 61 1.77 194 19 Saludab…
-
Ordenar el data frame según la columna
nombre
.Solucióndf |> arrange(nombre)
# A tibble: 14 × 8 nombre edad sexo peso altura colesterol imc Obesidad <chr> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <fct> 1 Antonio Fernández Ocaña 51 H 62 1.72 276 21 Saludab… 2 Antonio Ruiz Cruz 68 H 66 1.74 249 22 Saludab… 3 Carmen López Pinzón 35 M 65 1.7 200 22 Saludab… 4 Carolina Rubio Moreno 20 M 61 1.77 194 19 Saludab… 5 Javier García Sánchez 24 H NA 1.81 191 NA <NA> 6 José Luis Martínez Izquie… 18 H 85 1.79 182 27 Sobrepe… 7 José María de la Guía Sanz 58 H 78 1.87 198 22 Saludab… 8 Macarena Álvarez Luna 53 M 55 1.62 262 21 Saludab… 9 Marisa López Collado 46 M 51 1.58 148 20 Saludab… 10 Miguel Angel Cuadrado Gut… 27 H 109 1.98 210 28 Sobrepe… 11 Pedro Gálvez Tenorio 35 H 90 1.94 241 24 Saludab… 12 Pilar Martín González 22 M 60 1.66 NA 22 Saludab… 13 Rosa Díaz Díaz 32 M 65 1.73 232 22 Saludab… 14 Santiago Reillo Manzano 46 H 75 1.85 280 22 Saludab…
-
Ordenar el data frame ascendentemente por la columna
sexo
y descendentemente por la columnaedad
.Solución# A tibble: 14 × 8 nombre edad sexo peso altura colesterol imc Obesidad <chr> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <fct> 1 Antonio Ruiz Cruz 68 H 66 1.74 249 22 Saludab… 2 José María de la Guía Sanz 58 H 78 1.87 198 22 Saludab… 3 Antonio Fernández Ocaña 51 H 62 1.72 276 21 Saludab… 4 Santiago Reillo Manzano 46 H 75 1.85 280 22 Saludab… 5 Pedro Gálvez Tenorio 35 H 90 1.94 241 24 Saludab… 6 Miguel Angel Cuadrado Gut… 27 H 109 1.98 210 28 Sobrepe… 7 Javier García Sánchez 24 H NA 1.81 191 NA <NA> 8 José Luis Martínez Izquie… 18 H 85 1.79 182 27 Sobrepe… 9 Macarena Álvarez Luna 53 M 55 1.62 262 21 Saludab… 10 Marisa López Collado 46 M 51 1.58 148 20 Saludab… 11 Carmen López Pinzón 35 M 65 1.7 200 22 Saludab… 12 Rosa Díaz Díaz 32 M 65 1.73 232 22 Saludab… 13 Pilar Martín González 22 M 60 1.66 NA 22 Saludab… 14 Carolina Rubio Moreno 20 M 61 1.77 194 19 Saludab…
Ejercicio 2.3 El fichero notas-curso2.csv
contiene las notas de las asignaturas de un curso en varios grupos de alumnos.
-
Crear un data frame con los datos del curso a partir del fichero
notas-curso2.csv
.Solucióndf <- read_csv("https://raw.githubusercontent.com/asalber/estadistica-practicas-r/main/datos/notas-curso2.csv")
Rows: 120 Columns: 9 ── Column specification ──────────────────────────────────────────────────────── Delimiter: "," chr (4): sexo, turno, grupo, trabaja dbl (5): notaA, notaB, notaC, notaD, notaE ℹ Use `spec()` to retrieve the full column specification for this data. ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
df
# A tibble: 120 × 9 sexo turno grupo trabaja notaA notaB notaC notaD notaE <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> 1 Mujer Tarde C N 5.2 6.3 3.4 2.3 2 2 Hombre Mañana A N 5.7 5.7 4.2 3.5 2.7 3 Hombre Mañana B N 8.3 8.8 8.8 8 5.5 4 Hombre Mañana B N 6.1 6.8 4 3.5 2.2 5 Hombre Mañana A N 6.2 9 5 4.4 3.7 6 Hombre Mañana A S 8.6 8.9 9.5 8.4 3.9 7 Mujer Mañana A N 6.7 7.9 5.6 4.8 4.2 8 Mujer Tarde C S 4.1 5.2 1.7 0.3 1 9 Hombre Tarde C N 5 5 3.3 2.7 6 10 Hombre Tarde C N 5.3 6.3 4.8 3.6 2.3 # ℹ 110 more rows
-
Convertir el data frame a formato largo.
Solucióndf_largo <- df |> pivot_longer(notaA:notaE, names_to = "Asignatura", values_to = "Nota") df_largo
# A tibble: 600 × 6 sexo turno grupo trabaja Asignatura Nota <chr> <chr> <chr> <chr> <chr> <dbl> 1 Mujer Tarde C N notaA 5.2 2 Mujer Tarde C N notaB 6.3 3 Mujer Tarde C N notaC 3.4 4 Mujer Tarde C N notaD 2.3 5 Mujer Tarde C N notaE 2 6 Hombre Mañana A N notaA 5.7 7 Hombre Mañana A N notaB 5.7 8 Hombre Mañana A N notaC 4.2 9 Hombre Mañana A N notaD 3.5 10 Hombre Mañana A N notaE 2.7 # ℹ 590 more rows
-
Crear una nueva columna con la variable
calificación
que contenga las calificaciones de cada asignatura.Solucióndf_largo <- df_largo |> mutate(Califiación = cut(Nota, breaks = c(0, 4.99, 6.99, 8.99, 10), labels = c("SS", "AP", "NT", "SB"))) df_largo
# A tibble: 600 × 7 sexo turno grupo trabaja Asignatura Nota Califiación <chr> <chr> <chr> <chr> <chr> <dbl> <fct> 1 Mujer Tarde C N notaA 5.2 AP 2 Mujer Tarde C N notaB 6.3 AP 3 Mujer Tarde C N notaC 3.4 SS 4 Mujer Tarde C N notaD 2.3 SS 5 Mujer Tarde C N notaE 2 SS 6 Hombre Mañana A N notaA 5.7 AP 7 Hombre Mañana A N notaB 5.7 AP 8 Hombre Mañana A N notaC 4.2 SS 9 Hombre Mañana A N notaD 3.5 SS 10 Hombre Mañana A N notaE 2.7 SS # ℹ 590 more rows
-
Filtrar el conjunto de datos para obtener las asignaturas y las notas de las mujeres del grupo A, ordenadas de mayor a menor.
2.2 Ejercicios Propuestos
Ejercicio 2.4 La siguiente tabla recoge las notas de los alumnos de un curso con dos asignaturas.
Alumno | Sexo | Física | Química |
---|---|---|---|
Carlos | H | 6.7 | 8.1 |
María | M | 7.2 | 9.5 |
Carmen | M | 5.5 | 5 |
Pedro | H | 4.5 | |
Luis | H | 3.5 | 5 |
Sara | M | 6.2 | 4 |
-
Definir cuatro vectores con el nombre, el sexo y las notas de Física y Química.
-
Convertir el sexo en un factor y mostrar sus niveles.
-
Crear un data frame con el nombre, sexo y las notas de Física y Química.
Solucióndf <- data.frame(nombre, sexo, fisica, quimica) df
nombre sexo fisica quimica 1 Carlos H 6.7 8.1 2 María M 7.2 9.5 3 Carmen M 5.5 5.0 4 Pedro H NA 4.5 5 Luis H 3.5 5.0 6 Sara M 6.2 4.0
-
Crear una nueva columna con la nota media de Física y Química.
Solucióndf$media <- (df$fisica + df$quimica) / 2 df
nombre sexo fisica quimica media 1 Carlos H 6.7 8.1 7.40 2 María M 7.2 9.5 8.35 3 Carmen M 5.5 5.0 5.25 4 Pedro H NA 4.5 NA 5 Luis H 3.5 5.0 4.25 6 Sara M 6.2 4.0 5.10
-
Crear una nueva columna booleana
aprobado
que tenga el valorTRUE
si la media es mayor o igual que 5 yFALSE
en caso contrario.Solucióndf$aprobado <- df$media >= 5 df
nombre sexo fisica quimica media aprobado 1 Carlos H 6.7 8.1 7.40 TRUE 2 María M 7.2 9.5 8.35 TRUE 3 Carmen M 5.5 5.0 5.25 TRUE 4 Pedro H NA 4.5 NA NA 5 Luis H 3.5 5.0 4.25 FALSE 6 Sara M 6.2 4.0 5.10 TRUE
-
Filtrar el data frame para quedarse con el nombre y la media de las mujeres que han aprobado.
Solucióndf[df$sexo == "M" & df$media >= 5, c("nombre", "media")]
nombre media 2 María 8.35 3 Carmen 5.25 6 Sara 5.10
Ejercicio 2.5 Se ha diseñado un ensayo clínico aleatorizado, doble-ciego y controlado con placebo, para estudiar el efecto de dos alternativas terapéuticas en el control de la hipertensión arterial. Se han reclutado 100 pacientes hipertensos y estos han sido distribuidos aleatoriamente en tres grupos de tratamiento. A uno de los grupos (control) se le administró un placebo, a otro grupo se le administró un inhibidor de la enzima conversora de la angiotensina (IECA) y al otro un tratamiento combinado de un diurético y un Antagonista del Calcio. Las variables respuesta final fueron las presiones arteriales sistólica y diastólica.
Los datos con las claves de aleatorización han sido introducidos en una base de datos que reside en la central de aleatorización, mientras que los datos clínicos han sido archivados en dos archivos distintos, uno para cada uno de los dos centros participantes en el estudio.
Las variables almacenadas en estos archivos clínicos son las siguientes:
- CLAVE: Clave de aleatorización
- NOMBRE: Iniciales del paciente
- F_NACIM: Fecha de Nacimiento
- F_INCLUS: Fecha de inclusión
- SEXO: Sexo (0: Hombre 1: Mujer)
- ALTURA: Altura en cm.
- PESO: Peso en Kg.
- PAD_INI: Presión diastólica basal (inicial)
- PAD_FIN: Presión diastólica final
- PAS_INI: Presión sistólica basal (inicial)
- PAS_FIN: Presión sistólica final
El archivo de claves de aleatorización contiene sólo dos variables.
- CLAVE: Clave de aleatorización
- FARMACO: Fármaco administrado (0: Placebo, 1: IECA, 2:Ca Antagonista + diurético)
Crear un data frame con los datos de los pacientes del hospital A (fichero de csv datos-hospital-a.csv).
Crear un data frame con los datos de los pacientes del hospital B (fichero csv datos-hospital-b.csv).
-
Fusionar los datos de los dos hospitales en un nuevo data frame.
AyudaPara fusionar las filas de dos data frames con las mismas columnas usar la función
rbind
. Crear un data frame con los datos de las claves de aleatorización (fichero csv claves-aleatorizacion.csv)
-
Fusionar el data frame con los datos clínicos y el data frame con claves de aleatorización en un nuevo data frame.
AyudaPara fusionar las columnas de dos data frames usando una misma columna como clave en ambos data frames usar la función
left_join
del paquetedplyr
. Convertir en un factor el sexo.
Crear una nueva columna para la evolución de la presión arterial diastólica restando las columnas
PAS_FIN
yPAS_FIN
.