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 col2
<-
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(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(
# seleccionador tidy de columnas
tidyselect, 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){
* 10
.x
}
) )
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(
# seleccionador tidy de columnas
tidyselect, function(.x){
# .x: vector con valores de la columna a modificar
# cur_column(): actua como "nombre" en este nivel
cur_column()]
df[
}
) )
<-
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”.