2  dplyr

2.1 OPERACIONES SOBRE FILAS

filter()

Filtra los datos por filas en base a un criterio

Formula general
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.

Formula general
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.

Formula general
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

Formula general
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.

Formula general
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

Formula general
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.

Formula general
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

Formula general
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

Formula general
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.

Formula general
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.

Formula general
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

Formula general
# 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”.

Formula general

add_tally()

Agrega suma de valores de grupos como columna con nombre “n”.

Formula general

2.3 OPERACIONES SOBRE VECTORES

lag()

lead()

n_distinct()

nth()

first()

last()

2.4 GENERACION DE GRUPOS

group_by()

ungroup()

summarize() & summarise()

slice_*()

n()

tally()

count()

2.5 JOINS

resumen

inner_join()

full_join()

left_join()

right_join()

anti_join()

semi_join()

cross_join()

nest_join()

2.6 OPERACIONES LÓGICAS

if_else()

case_when()

case_match()

between()

2.7 ACUMULACIÓN DE DATAFRAMES

bind_rows()

bind_cols()

Formula general