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
| nombre |
0 |
1 |
14 |
31 |
0 |
14 |
0 |
| sexo |
0 |
1 |
1 |
1 |
0 |
2 |
0 |
Variable type: numeric
| 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