Aquí proponemos
una pequeña base de datos, para introducir el uso de dplyr como
herramienta de gestión de base de datos en R.
data1 <- data.frame(
id = 1:8,
edad =
c(8,9,12,22,14,17,22,16),
mujer =
c(T,T,F,F,F,T,T,F),
prov =
c("azua","azua","azua","Bani","Bani","Ocoa","Bani","Ocoa"),
nota = c(60,70,71,82,92,80,95,72),
nota2 = c(60,70,71,82,92,80,95,72),
carrera =
c("Ecn","Ing","Ecn","Ing","Ecn","Ing","Ecn","Ing")
)
data1
id edad mujer prov nota nota2 carrera
1 1
8 TRUE azua 60
60 Ecn
2 2
9 TRUE azua 70
70 Ing
3 3 12
FALSE azua 71 71
Ecn
4 4 22
FALSE Bani 82 82
Ing
5 5 14
FALSE Bani 92 92
Ecn
6 6 17
TRUE Ocoa 80 80
Ing
7 7 22
TRUE Bani 95 95
Ecn
8 8 16
FALSE Ocoa 72 72
Ing
Con el
siguiente ejemplo solo queremos ilustrar que dplyr es una alternativa a las
operaciones tradicionales con R:
Nota
promedio
Base de
R
mean(nota[prov %in%
c("Bani","Ocoa")])
[1] 84.2
Paquete dplyr
Library(tidyverse)
data1 |>
dplyr::filter(prov %in% c("Bani","Ocoa")) |>
summarise(mean(nota))
mean(nota)
1 84.2
1. Select. Permite seleccionar columnas o
variables de una base de datos. De la base anterior, usamos select para
seleccionar las columnas id y edad. Note que se usa dplyr::select, para especificar de que
paquete deseamos usar la función select, dado que existen varios paquetes con
funciones de este nombre.
data1 |>
dplyr::select(id,edad)
id edad
1 1 8
2 2 9
3 3 12
4 4 22
5 5 14
6 6 17
7 7 22
8 8 16
2. filter. Condicionar las
observaciones deseadas. Es un filtro al permitir discriminar entre observaciones
en función del cumplimiento de alguna condición de las mismas. En el ejemplo
siguiente usamos select para elegir todas las variables (everything), y
posteriormente filtramos para solo acceder a las personas con calificación mayor
a 69.
data1 |>
dplyr::select(everything()) |>
dplyr::filter(nota > 69)
id edad mujer
prov nota nota2 carrera
1 2 9
TRUE azua 70 70 Ing
2 3 12 FALSE azua 71
71 Ecn
3 4 22 FALSE Bani 82
82 Ing
4 5 14 FALSE Bani 92
92 Ecn
5 6 17
TRUE Ocoa 80 80
Ing
6 7 22
TRUE Bani 95 95
Ecn
7 8 16 FALSE Ocoa 72
72 Ing
3. mutate. Se crea para crear una variable o
crear una variable nueva. En este sentido podemos usar los operadores de R para
crear las variables que entendamos. Por ejemplo, ahora creamos la variable edad
al 2.
data1 |>
dplyr::select(everything()) |>
dplyr::filter(nota > 69) |>
mutate(Edad2 =
edad^2)
id edad mujer
prov nota nota2 carrera Edad2
1 2 9
TRUE azua 70 70
Ing 81
2 3 12 FALSE azua 71
71 Ecn 144
3 4 22 FALSE Bani 82
82 Ing 484
4 5 14 FALSE Bani 92
92 Ecn 196
5 6 17
TRUE Ocoa 80 80
Ing 289
6 7 22
TRUE Bani 95 95
Ecn 484
7 8 16 FALSE Ocoa 72
72 Ing 256
4. summarise. Permite crear un resumen
de la base de datos, análisis condicional. Por ejemplo, sacamos las notas promedio
por carrera. Note que ahora debemos indicar cual es la función de agregación de
las variables.
data1 |>
dplyr::select(everything()) |>
dplyr::filter(nota > 69) |>
group_by(carrera) |>
summarise(mean(nota))
# A tibble: 2 x 2
carrera
`mean(nota)`
<chr> <dbl>
1 Ecn
86
2 Ing
76
Podemos
agregar múltiples capas en group_by:
data1 |>
dplyr::select(everything()) |>
dplyr::filter(nota > 69) |>
group_by(carrera,
prov) |>
summarise(promedio = mean(nota))
`summarise()` has grouped output by 'carrera'. You can
override using the `.groups` argument.
# A tibble: 5 x 3
# Groups:
carrera [2]
carrera
prov promedio
<chr> <chr> <dbl>
1 Ecn azua 71
2 Ecn
Bani 93.5
3 Ing
azua 70
4 Ing
Bani 82
5 Ing
Ocoa 76
5. Cambiar la estructura de una base
de datos. Por el formato wide:
data1 |>
dplyr::select(id,prov,starts_with("nota"))
id prov nota
nota2
1 1 azua 60
60
2 2 azua 70
70
3 3 azua 71
71
4 4 Bani 82
82
5 5 Bani 92
92
6 6 Ocoa 80
80
7 7 Bani
95 95
8 8 Ocoa
72 72
Ahora,
la base anterior la transformamos en formato long.
data1 |>
dplyr::select(id,starts_with("nota")) |>
pivot_longer(cols = !id, names_to='asigna', values_to='valor')
# A tibble: 16 x 3
id asigna
valor
<int>
<chr> <dbl>
1 1 nota
60
2 1 nota2
60
3 2 nota
70
4 2 nota2
70
5 3 nota
71
6 3 nota2
71
7 4 nota
82
8 4 nota2
82
9 5 nota
92
10 5
nota2 92
11 6
nota 80
12 6
nota2 80
13 7
nota 95
14 7
nota2 95
15 8
nota 72
16 8
nota2 72
6. Arrange. Organizar la base de datos. En
este caso, organizamos la base de datos en función del valor de una o múltiples
variable.
data_long <- data1 |>
dplyr::select(id,starts_with("nota")) |>
pivot_longer(cols
= !id, names_to='asigna', values_to='valor') |>
arrange(desc(asigna))
data_long
# A tibble: 16 x 3
id asigna
valor
<int>
<chr> <dbl>
1 1 nota2
60
2 2 nota2
70
3 3 nota2
71
4 4 nota2
82
5 5 nota2
92
6 6 nota2
80
7 7 nota2
95
8 8 nota2
72
9 1 nota
60
10 2
nota 70
11 3
nota 71
12 4
nota 82
13 5
nota 92
14 6
nota 80
15 7
nota 95
16 8
nota 72
7. inner. Permite combinar información de
distintas bases relacionadas.
inner_join(data_long, data1, by = "id") |>
dplyr::select(-starts_with("nota"))
# A tibble: 16 x 7
id asigna
valor edad mujer prov carrera
<int>
<chr> <dbl> <dbl>
<lgl> <chr> <chr>
1 1 nota2
60 8 TRUE azua
Ecn
2 2 nota2
70 9 TRUE azua
Ing
3 3 nota2
71 12 FALSE azua Ecn
4 4 nota2
82 22 FALSE Bani Ing
5 5 nota2
92 14 FALSE Bani Ecn
6 6 nota2
80 17 TRUE Ocoa
Ing
7 7 nota2
95 22 TRUE Bani
Ecn
8 8 nota2
72 16 FALSE Ocoa Ing
9 1 nota
60 8 TRUE azua
Ecn
10 2
nota 70 9 TRUE
azua Ing
11 3
nota 71 12 FALSE azua Ecn
12 4
nota 82 22 FALSE Bani Ing
13 5
nota 92 14 FALSE Bani Ecn
14 6
nota 80 17 TRUE
Ocoa Ing
15 7
nota 95 22 TRUE
Bani Ecn
16 8
nota 72 16 FALSE Ocoa Ing