Introducción

En este documento encontrarán dos ejercicios de preprocesamiento de datos donde se practica manejo y limpieza de datos de un “data frame” y una base de datos.

Ejercicio 1

El siguiente “data frame” contiene los ingresos y gastos de una empresa generados durante el verano.

1. Aquí encontrará la creación del “data frame”:

empresa <- data.frame(Mes=c("Mayo","Junio","Julio"),
                      Ingresos=c(45000,41500,51200),
                      Gastos=c(33400,35400,35600))
empresa
##     Mes Ingresos Gastos
## 1  Mayo    45000  33400
## 2 Junio    41500  35400
## 3 Julio    51200  35600

2. Añade una nueva columna denominada impuestos:

empresa2 <- mutate(empresa,Impuestos=c(6450,6300,7100))

empresa2
##     Mes Ingresos Gastos Impuestos
## 1  Mayo    45000  33400      6450
## 2 Junio    41500  35400      6300
## 3 Julio    51200  35600      7100

3. Añade una nueva fila con los datos de Agosto:

empresa3 <- empresa2 %>% 
  add_row(Mes="Agosto", Ingresos=49700, Gastos=36300, Impuestos=6850)

empresa3
##      Mes Ingresos Gastos Impuestos
## 1   Mayo    45000  33400      6450
## 2  Junio    41500  35400      6300
## 3  Julio    51200  35600      7100
## 4 Agosto    49700  36300      6850

4. Cambia los ingresos de julio por 50400:

empresa3[empresa3$Mes=="Julio","Ingresos"] <- 50400

empresa3
##      Mes Ingresos Gastos Impuestos
## 1   Mayo    45000  33400      6450
## 2  Junio    41500  35400      6300
## 3  Julio    50400  35600      7100
## 4 Agosto    49700  36300      6850

5. Crea una nueva columna con los beneficios de cada mes (ingresos - gastos - impuestos):

empresa4=empresa3 %>% 
  mutate(Beneficios=Ingresos - Gastos - Impuestos)

empresa4
##      Mes Ingresos Gastos Impuestos Beneficios
## 1   Mayo    45000  33400      6450       5150
## 2  Junio    41500  35400      6300       -200
## 3  Julio    50400  35600      7100       7700
## 4 Agosto    49700  36300      6850       6550

6. Crea una nueva columna de tipo factor, que denomines Balance con dos posibles categorías, positivo: si hay beneficios y negativo: si hay pérdidas:

empresa5 <- empresa4 %>%  
  mutate(Balance = factor(case_when(
    Beneficios > 0 ~ "positivo",
    Beneficios < 0 ~ "negativo"
  )))
empresa5
##      Mes Ingresos Gastos Impuestos Beneficios  Balance
## 1   Mayo    45000  33400      6450       5150 positivo
## 2  Junio    41500  35400      6300       -200 negativo
## 3  Julio    50400  35600      7100       7700 positivo
## 4 Agosto    49700  36300      6850       6550 positivo

7. Filtra el conjunto de datos para quedarse con los nombres de los meses y los beneficios de los meses con balance positivo:

empresafinal<-empresa5[empresa5$Balance == "positivo", c("Mes", "Beneficios")]
empresafinal
##      Mes Beneficios
## 1   Mayo       5150
## 3  Julio       7700
## 4 Agosto       6550

Ejercicio 2

La base de datos Medicos.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´as de su nombre.

1. Aquí encontrará la creación del “data frame”:

Medicos <- read.csv("/cloud/project/Medicos.csv")

2. Encuentre una vision general de toda la base de datos (cantidad de variables, observaciones, tipos de variables, etc):

skimr::skim(Medicos)
Data summary
Name Medicos
Number of rows 14
Number of columns 6
_______________________
Column type frequency:
character 2
numeric 4
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
nombre 0 1 14 31 0 14 0
sexo 0 1 1 1 0 2 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
edad 0 1.00 38.21 15.62 18.00 24.75 35.00 49.75 68.00 ▇▅▃▅▂
peso 1 0.93 70.92 16.13 51.00 61.00 65.00 78.00 109.00 ▇▅▅▂▂
altura 0 1.00 1.77 0.12 1.58 1.70 1.75 1.84 1.98 ▆▇▆▃▃
colesterol 1 0.93 220.23 39.85 148.00 194.00 210.00 249.00 280.00 ▂▇▂▅▅

3. Crea una nueva columna con el indice de masa corporal, usando IMC = peso/altura:

medicos1=Medicos %>% mutate(IMC=peso/altura)
medicos1
##                             nombre edad sexo peso altura colesterol      IMC
## 1     José Luis Martínez Izquierdo   18    H   85   1.79        182 47.48603
## 2                   Rosa Díaz Díaz   32    M   65   1.73        232 37.57225
## 3            Javier Garcia Sánchez   24    H   NA   1.81        191       NA
## 4              Carmen López Pinzón   35    M   65   1.70        200 38.23529
## 5             Marisa López Collado   46    M   51   1.58        148 32.27848
## 6                Antonio Ruiz Cruz   68    H   66   1.74        249 37.93103
## 7          Antonio Fernández Ocaña   51    H   62   1.72        276 36.04651
## 8            Pilar Martín González   22    M   60   1.66         NA 36.14458
## 9             Pedro Gálvez Tenorio   35    H   90   1.94        241 46.39175
## 10         Santiago Reillo Manzano   46    H   75   1.85        280 40.54054
## 11           Macarena Álvarez Luna   53    M   55   1.62        262 33.95062
## 12                 José María Sanz   58    H   78   1.87        198 41.71123
## 13 Miguel Angel Cuadrado Gutiérrez   27    H  109   1.98        210 55.05051
## 14           Carolina Rubio Moreno   20    M   61   1.77        194 34.46328

4. Crea una nueva variable, denominada obesidad recodificando la columna IMC en 4 categorías de peso:

medicos2=medicos1 %>% mutate(obesidad = case_when(IMC < 18.5 ~ "Bajo peso", IMC<= 24.5 ~ "Saludable", IMC <= 30 ~ "Sobrepeso", IMC > 30 ~ "Obeso"))
medicos2
##                             nombre edad sexo peso altura colesterol      IMC
## 1     José Luis Martínez Izquierdo   18    H   85   1.79        182 47.48603
## 2                   Rosa Díaz Díaz   32    M   65   1.73        232 37.57225
## 3            Javier Garcia Sánchez   24    H   NA   1.81        191       NA
## 4              Carmen López Pinzón   35    M   65   1.70        200 38.23529
## 5             Marisa López Collado   46    M   51   1.58        148 32.27848
## 6                Antonio Ruiz Cruz   68    H   66   1.74        249 37.93103
## 7          Antonio Fernández Ocaña   51    H   62   1.72        276 36.04651
## 8            Pilar Martín González   22    M   60   1.66         NA 36.14458
## 9             Pedro Gálvez Tenorio   35    H   90   1.94        241 46.39175
## 10         Santiago Reillo Manzano   46    H   75   1.85        280 40.54054
## 11           Macarena Álvarez Luna   53    M   55   1.62        262 33.95062
## 12                 José María Sanz   58    H   78   1.87        198 41.71123
## 13 Miguel Angel Cuadrado Gutiérrez   27    H  109   1.98        210 55.05051
## 14           Carolina Rubio Moreno   20    M   61   1.77        194 34.46328
##    obesidad
## 1     Obeso
## 2     Obeso
## 3      <NA>
## 4     Obeso
## 5     Obeso
## 6     Obeso
## 7     Obeso
## 8     Obeso
## 9     Obeso
## 10    Obeso
## 11    Obeso
## 12    Obeso
## 13    Obeso
## 14    Obeso

5. Reordena la base de datos, colocando la columna sexo antes que la columna edad:

medicos3= medicos2 %>% select(nombre,sexo,everything())
medicos3
##                             nombre sexo edad peso altura colesterol      IMC
## 1     José Luis Martínez Izquierdo    H   18   85   1.79        182 47.48603
## 2                   Rosa Díaz Díaz    M   32   65   1.73        232 37.57225
## 3            Javier Garcia Sánchez    H   24   NA   1.81        191       NA
## 4              Carmen López Pinzón    M   35   65   1.70        200 38.23529
## 5             Marisa López Collado    M   46   51   1.58        148 32.27848
## 6                Antonio Ruiz Cruz    H   68   66   1.74        249 37.93103
## 7          Antonio Fernández Ocaña    H   51   62   1.72        276 36.04651
## 8            Pilar Martín González    M   22   60   1.66         NA 36.14458
## 9             Pedro Gálvez Tenorio    H   35   90   1.94        241 46.39175
## 10         Santiago Reillo Manzano    H   46   75   1.85        280 40.54054
## 11           Macarena Álvarez Luna    M   53   55   1.62        262 33.95062
## 12                 José María Sanz    H   58   78   1.87        198 41.71123
## 13 Miguel Angel Cuadrado Gutiérrez    H   27  109   1.98        210 55.05051
## 14           Carolina Rubio Moreno    M   20   61   1.77        194 34.46328
##    obesidad
## 1     Obeso
## 2     Obeso
## 3      <NA>
## 4     Obeso
## 5     Obeso
## 6     Obeso
## 7     Obeso
## 8     Obeso
## 9     Obeso
## 10    Obeso
## 11    Obeso
## 12    Obeso
## 13    Obeso
## 14    Obeso

6. Elimina las filas con datos faltantes en la columna colesterol:

medicos4 = medicos3 %>% drop_na(colesterol)
medicos4
##                             nombre sexo edad peso altura colesterol      IMC
## 1     José Luis Martínez Izquierdo    H   18   85   1.79        182 47.48603
## 2                   Rosa Díaz Díaz    M   32   65   1.73        232 37.57225
## 3            Javier Garcia Sánchez    H   24   NA   1.81        191       NA
## 4              Carmen López Pinzón    M   35   65   1.70        200 38.23529
## 5             Marisa López Collado    M   46   51   1.58        148 32.27848
## 6                Antonio Ruiz Cruz    H   68   66   1.74        249 37.93103
## 7          Antonio Fernández Ocaña    H   51   62   1.72        276 36.04651
## 8             Pedro Gálvez Tenorio    H   35   90   1.94        241 46.39175
## 9          Santiago Reillo Manzano    H   46   75   1.85        280 40.54054
## 10           Macarena Álvarez Luna    M   53   55   1.62        262 33.95062
## 11                 José María Sanz    H   58   78   1.87        198 41.71123
## 12 Miguel Angel Cuadrado Gutiérrez    H   27  109   1.98        210 55.05051
## 13           Carolina Rubio Moreno    M   20   61   1.77        194 34.46328
##    obesidad
## 1     Obeso
## 2     Obeso
## 3      <NA>
## 4     Obeso
## 5     Obeso
## 6     Obeso
## 7     Obeso
## 8     Obeso
## 9     Obeso
## 10    Obeso
## 11    Obeso
## 12    Obeso
## 13    Obeso

7. Ordena la base de datos según la columna nombre:

medicos5 = medicos4 %>% arrange(nombre)
medicos5
##                             nombre sexo edad peso altura colesterol      IMC
## 1          Antonio Fernández Ocaña    H   51   62   1.72        276 36.04651
## 2                Antonio Ruiz Cruz    H   68   66   1.74        249 37.93103
## 3              Carmen López Pinzón    M   35   65   1.70        200 38.23529
## 4            Carolina Rubio Moreno    M   20   61   1.77        194 34.46328
## 5            Javier Garcia Sánchez    H   24   NA   1.81        191       NA
## 6     José Luis Martínez Izquierdo    H   18   85   1.79        182 47.48603
## 7                  José María Sanz    H   58   78   1.87        198 41.71123
## 8            Macarena Álvarez Luna    M   53   55   1.62        262 33.95062
## 9             Marisa López Collado    M   46   51   1.58        148 32.27848
## 10 Miguel Angel Cuadrado Gutiérrez    H   27  109   1.98        210 55.05051
## 11            Pedro Gálvez Tenorio    H   35   90   1.94        241 46.39175
## 12                  Rosa Díaz Díaz    M   32   65   1.73        232 37.57225
## 13         Santiago Reillo Manzano    H   46   75   1.85        280 40.54054
##    obesidad
## 1     Obeso
## 2     Obeso
## 3     Obeso
## 4     Obeso
## 5      <NA>
## 6     Obeso
## 7     Obeso
## 8     Obeso
## 9     Obeso
## 10    Obeso
## 11    Obeso
## 12    Obeso
## 13    Obeso

8. Crea una nueva base de datos que contenga solo las mujeres:

mujeres= medicos5 %>% filter(sexo=="M")
mujeres
##                  nombre sexo edad peso altura colesterol      IMC obesidad
## 1   Carmen López Pinzón    M   35   65   1.70        200 38.23529    Obeso
## 2 Carolina Rubio Moreno    M   20   61   1.77        194 34.46328    Obeso
## 3 Macarena Álvarez Luna    M   53   55   1.62        262 33.95062    Obeso
## 4  Marisa López Collado    M   46   51   1.58        148 32.27848    Obeso
## 5        Rosa Díaz Díaz    M   32   65   1.73        232 37.57225    Obeso

9. Crea una nueva base de datos que contenga hombres mayores de 30 años:

hombres=medicos5 %>% filter(sexo=="H", edad > 30)
hombres
##                    nombre sexo edad peso altura colesterol      IMC obesidad
## 1 Antonio Fernández Ocaña    H   51   62   1.72        276 36.04651    Obeso
## 2       Antonio Ruiz Cruz    H   68   66   1.74        249 37.93103    Obeso
## 3         José María Sanz    H   58   78   1.87        198 41.71123    Obeso
## 4    Pedro Gálvez Tenorio    H   35   90   1.94        241 46.39175    Obeso
## 5 Santiago Reillo Manzano    H   46   75   1.85        280 40.54054    Obeso

10. Crea una nueva base de datos volviéndola anónima (elimina la columna nombre):

anómima=medicos5[,-1]
anómima
##    sexo edad peso altura colesterol      IMC obesidad
## 1     H   51   62   1.72        276 36.04651    Obeso
## 2     H   68   66   1.74        249 37.93103    Obeso
## 3     M   35   65   1.70        200 38.23529    Obeso
## 4     M   20   61   1.77        194 34.46328    Obeso
## 5     H   24   NA   1.81        191       NA     <NA>
## 6     H   18   85   1.79        182 47.48603    Obeso
## 7     H   58   78   1.87        198 41.71123    Obeso
## 8     M   53   55   1.62        262 33.95062    Obeso
## 9     M   46   51   1.58        148 32.27848    Obeso
## 10    H   27  109   1.98        210 55.05051    Obeso
## 11    H   35   90   1.94        241 46.39175    Obeso
## 12    M   32   65   1.73        232 37.57225    Obeso
## 13    H   46   75   1.85        280 40.54054    Obeso