2 dplyr
2.1 OPERACIONES SOBRE FILAS
filter()
Filtra los datos por filas en base a un criterio
df %>%
filter(condicion1, condicion2, ..., condicionn)df <-
tibble(
a = c(1, 2, 3, 4, 5, 6),
b = c(5, 6, 7, 8, 9, 10),
c = c(8, 9, 10, 11, 12, 13)
)| a | b | c |
|---|---|---|
| 1 | 5 | 8 |
| 2 | 6 | 9 |
| 3 | 7 | 10 |
| 4 | 8 | 11 |
| 5 | 9 | 12 |
| 6 | 10 | 13 |
resultado <-
df %>%
filter(b > 7)| a | b | c |
|---|---|---|
| 4 | 8 | 11 |
| 5 | 9 | 12 |
| 6 | 10 | 13 |
arrange() & desc()
Ordena los datos.
df %>%
arrange(col1, desc(col2)) # ordena crecientemente por col1, luego decreciente por col2df <-
tibble(
a = c(5, 1, 2, 6, 3, 4),
b = c(5, 6, 7, 8, 9, 10),
c = c(8, 9, 10, 11, 12, 13)
)| a | b | c |
|---|---|---|
| 5 | 5 | 8 |
| 1 | 6 | 9 |
| 2 | 7 | 10 |
| 6 | 8 | 11 |
| 3 | 9 | 12 |
| 4 | 10 | 13 |
resultado <-
df %>%
arrange(a)| a | b | c |
|---|---|---|
| 1 | 6 | 9 |
| 2 | 7 | 10 |
| 3 | 9 | 12 |
| 4 | 10 | 13 |
| 5 | 5 | 8 |
| 6 | 8 | 11 |
df <-
tibble(
a = c(5, 1, 2, 6, 3, 4),
b = c(5, 6, 7, 8, 9, 10),
c = c(8, 9, 10, 11, 12, 13)
)| a | b | c |
|---|---|---|
| 5 | 5 | 8 |
| 1 | 6 | 9 |
| 2 | 7 | 10 |
| 6 | 8 | 11 |
| 3 | 9 | 12 |
| 4 | 10 | 13 |
resultado <-
df %>%
arrange(desc(c))| a | b | c |
|---|---|---|
| 4 | 10 | 13 |
| 3 | 9 | 12 |
| 6 | 8 | 11 |
| 2 | 7 | 10 |
| 1 | 6 | 9 |
| 5 | 5 | 8 |
distinct()
Selecciona todas las combinaciones de valores únicos de una o más columnas.
df %>%
distinct(col1, col2, ..., coln)df <-
tibble(
a = c(1, 1, 2, 2, 3, 3),
b = c(5, 6, 7, 7, 8, 9),
c = c(8, 9, 10, 11, 12, 13)
)| a | b | c |
|---|---|---|
| 1 | 5 | 8 |
| 1 | 6 | 9 |
| 2 | 7 | 10 |
| 2 | 7 | 11 |
| 3 | 8 | 12 |
| 3 | 9 | 13 |
resultado <-
df %>%
distinct(a)| a |
|---|
| 1 |
| 2 |
| 3 |
df <-
tibble(
a = c(1, 1, 2, 2, 3, 3),
b = c(5, 6, 7, 7, 8, 9),
c = c(8, 9, 10, 11, 12, 13)
)| a | b | c |
|---|---|---|
| 1 | 5 | 8 |
| 1 | 6 | 9 |
| 2 | 7 | 10 |
| 2 | 7 | 11 |
| 3 | 8 | 12 |
| 3 | 9 | 13 |
resultado <-
df %>%
distinct(a, b)| a | b |
|---|---|
| 1 | 5 |
| 1 | 6 |
| 2 | 7 |
| 3 | 8 |
| 3 | 9 |
2.2 OPERACIONES SOBRE COLUMNAS
select()
Selecciona columnas por nombre o posición
df %>%
select(col1, col2, ..., coln)df <-
tibble(
a = c(1, 2, 3, 4),
b = c(2, 3, 4, 5),
c = c(3, 4, 5, 6),
d = c(4, 5, 6, 7),
e = c(5, 6, 7, 8),
f = c(6, 7, 8, 9)
)| a | b | c | d | e | f |
|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 |
| 2 | 3 | 4 | 5 | 6 | 7 |
| 3 | 4 | 5 | 6 | 7 | 8 |
| 4 | 5 | 6 | 7 | 8 | 9 |
resultado <-
df %>%
select(a, c, e)| a | c | e |
|---|---|---|
| 1 | 3 | 5 |
| 2 | 4 | 6 |
| 3 | 5 | 7 |
| 4 | 6 | 8 |
rename()
Le cambia el nombre a una variable.
df %>%
rename(nombre_nuevo = nombre_antiguo)df <-
tibble(
a = c(1, 2, 3, 4),
b = c(2, 3, 4, 5),
c = c(3, 4, 5, 6),
d = c(4, 5, 6, 7)
)| a | b | c | d |
|---|---|---|---|
| 1 | 2 | 3 | 4 |
| 2 | 3 | 4 | 5 |
| 3 | 4 | 5 | 6 |
| 4 | 5 | 6 | 7 |
resultado <-
df %>%
rename(nuevo_nombre = d)| a | b | c | nuevo_nombre |
|---|---|---|---|
| 1 | 2 | 3 | 4 |
| 2 | 3 | 4 | 5 |
| 3 | 4 | 5 | 6 |
| 4 | 5 | 6 | 7 |
rename_with()
Cambia el nombre de la variable según una norma lógica o fórmula
df %>%
rename_with(
function(.x){
# .x: nombre antiguo de la variable.
# ----condicion o norma lógica
}
.cols = tidyselect # seleccionador tidy de columnas
)df <-
tibble(
a = c(1, 2, 3, 4),
b = c(2, 3, 4, 5),
c = c(3, 4, 5, 6),
d = c(4, 5, 6, 7)
)| a | b | c | d |
|---|---|---|---|
| 1 | 2 | 3 | 4 |
| 2 | 3 | 4 | 5 |
| 3 | 4 | 5 | 6 |
| 4 | 5 | 6 | 7 |
resultado <-
df %>%
rename_with(
function(.x){
paste0(.x, "_new")
},
.cols = all_of(c("a", "b")) #selecciona las columnas a y b
)| a_new | b_new | c | d |
|---|---|---|---|
| 1 | 2 | 3 | 4 |
| 2 | 3 | 4 | 5 |
| 3 | 4 | 5 | 6 |
| 4 | 5 | 6 | 7 |
relocate()
Mover variables de posición.
df %>%
relocate(col1, col2, ..., coln)df <-
tibble(
a = c(1, 2, 3, 4),
b = c(2, 3, 4, 5),
c = c(3, 4, 5, 6),
d = c(4, 5, 6, 7)
)| a | b | c | d |
|---|---|---|---|
| 1 | 2 | 3 | 4 |
| 2 | 3 | 4 | 5 |
| 3 | 4 | 5 | 6 |
| 4 | 5 | 6 | 7 |
resultado <-
df %>%
relocate(d, c, b, a)| d | c | b | a |
|---|---|---|---|
| 4 | 3 | 2 | 1 |
| 5 | 4 | 3 | 2 |
| 6 | 5 | 4 | 3 |
| 7 | 6 | 5 | 4 |
pull()
Extrae una columna como vector
df %>%
pull(col)df <-
tibble(
a = c(1, 2, 3, 4),
b = c(2, 3, 4, 5),
c = c(3, 4, 5, 6),
d = c(4, 5, 6, 7)
)| a | b | c | d |
|---|---|---|---|
| 1 | 2 | 3 | 4 |
| 2 | 3 | 4 | 5 |
| 3 | 4 | 5 | 6 |
| 4 | 5 | 6 | 7 |
resultado <-
df %>%
pull(c)
mutate()
Agrega/modifica una columna a la data
df %>%
mutate(
nombre_col1 = valor1,
nombre_col2 = valor2,
...,
nombre_coln = valorn,
)df <-
tibble(
a = c(1, 2, 3, 4),
b = c(2, 3, 4, 5),
c = c(3, 4, 5, 6),
d = c(4, 5, 6, 7)
)| a | b | c | d |
|---|---|---|---|
| 1 | 2 | 3 | 4 |
| 2 | 3 | 4 | 5 |
| 3 | 4 | 5 | 6 |
| 4 | 5 | 6 | 7 |
resultado <-
df %>%
mutate(
row_sum = rowSums(., na.rm = TRUE), # calcula la suma para cada fila.
mean_a = mean(a), # calcula el promedio de columna a y lo pone como valor a todas las filas.
text_a_b = paste0(a, b) # pega los valores de a y b para cada caso.
)| a | b | c | d | row_sum | mean_a | text_a_b |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 10 | 2.5 | 12 |
| 2 | 3 | 4 | 5 | 14 | 2.5 | 23 |
| 3 | 4 | 5 | 6 | 18 | 2.5 | 34 |
| 4 | 5 | 6 | 7 | 22 | 2.5 | 45 |
across()
Función accesoria a mutate() que permite realizar la misma operación a varias columnas a la vez.
df %>%
mutate(
across(
tidyselect, # seleccionador tidy de columnas
function(.x){
# .x: vector con valores de la columna a modificar
}
)
)df <-
tibble(
a = c(1, 2, 3, 4),
b = c(2, 3, 4, 5),
c = c(3, 4, 5, 6),
d = c(4, 5, 6, 7)
)| a | b | c | d |
|---|---|---|---|
| 1 | 2 | 3 | 4 |
| 2 | 3 | 4 | 5 |
| 3 | 4 | 5 | 6 |
| 4 | 5 | 6 | 7 |
resultado <-
df %>%
mutate(
across(
all_of(c("c", "d")), # selecciona las columnas c y d
function(.x){
.x * 10
}
)
)| a | b | c | d |
|---|---|---|---|
| 1 | 2 | 30 | 40 |
| 2 | 3 | 40 | 50 |
| 3 | 4 | 50 | 60 |
| 4 | 5 | 60 | 70 |
cur_column()
Función accesoria a across() que extrae el nombre de la columna actual que se está procesando.
df %>%
mutate(
across(
tidyselect, # seleccionador tidy de columnas
function(.x){
# .x: vector con valores de la columna a modificar
# cur_column(): actua como "nombre" en este nivel
df[cur_column()]
}
)
)df <-
tibble(
a = c(1, 2, 3, 4),
b = c(2, 3, 4, 5),
c = c(3, 4, 5, 6),
d = c(4, 5, 6, 7)
)| a | b | c | d |
|---|---|---|---|
| 1 | 2 | 3 | 4 |
| 2 | 3 | 4 | 5 |
| 3 | 4 | 5 | 6 |
| 4 | 5 | 6 | 7 |
resultado <-
df %>%
mutate(
across(
all_of(c("a", "b")),
function(.x){
paste0(as.character(.x), cur_column()) # junta el valor con el nombre de la columna
}
)
)| a | b | c | d |
|---|---|---|---|
| 1a | 2b | 3 | 4 |
| 2a | 3b | 4 | 5 |
| 3a | 4b | 5 | 6 |
| 4a | 5b | 6 | 7 |
pick()
Función accesoria para mutate para elegir multiples columnas para una operación
# Por que su función es seleccionar es difícil establecer una formula general, por lo tanto, se utiliza un ejemplo simple como forma general
df %>%
mutate(
var = rowMeans(pick(tidyselect)) # calcularía la media por fila entre los valores de las variables incluidas en el tidyselect.
)df <-
tibble(
a = c(1, 2, 3, 4),
b = c(2, 3, 4, 5),
c = c(3, 4, 5, 6),
d = c(4, 5, 6, 7)
)| a | b | c | d |
|---|---|---|---|
| 1 | 2 | 3 | 4 |
| 2 | 3 | 4 | 5 |
| 3 | 4 | 5 | 6 |
| 4 | 5 | 6 | 7 |
resultado <-
df %>%
mutate(
a_b_sum = rowSums(pick(all_of(c("a", "b"))), na.rm = TRUE), # calcula la suma de filas pero solo de a y b.
c_d_mean = rowMeans(pick(all_of(c("c", "d"))), na.rm = TRUE) # ejemplo en formula general.
)add_count()
Agrega conteo de grupos como columna con nombre “n”.
add_tally()
Agrega suma de valores de grupos como columna con nombre “n”.