Dos años con pandas y scikit-learn y ahora vuelvo a R. Y in mi regreso me propuse comenzar a trabajar con dplyr y mi productividad se está incrementando exponencialmente; creo que dplyr es LA HERRAMIENTA para el manejo de data.frames con R, ni me imagino cómo puede funcionar sparklyr… Para aquellos que estéis iniciando vuestra andadura con R o para los que no estéis acostumbrados a dplyr, he hecho una recopilación de las tareas más habituales que hago con esta librería. Se pueden resumir in:

  • Seleccionar columnas.
  • Seleccionar registros.
  • Crear nuevas variables.
  • Sumarizar datos.
  • Ordenar datos.
  • Uniones de datos.

Como es habitual, trabajamos con ejemplos (data(iris), library(dplyr)):

Seleccionar columnas select():

two.columns <- iris %>%
  select(Sepal.Length, Sepal.Width)

columns <- c("Sepal.Length", "Sepal.Width")
two.columns <- iris %>%
  select(all_of(columns))

Seleccionar registros filter():

setosa <- iris %>%
  filter(Species == "setosa")

species_to_select <- c("setosa", "virginica")
species <- iris %>%
  filter(Species %in% species_to_select)

table(species$Species)

Crear nuevas variables mutate():

iris2 <- iris %>%
  mutate(Sepal.Length.6 = ifelse(Sepal.Length >= 6, "GE 6", "LT 6")) %>%
  mutate(Sepal.Length.rela = Sepal.Length / mean(Sepal.Length))

Sumarizar group_by(), summarize():

iris %>%
  group_by(Species) %>%
  summarize(mean.Sepal.Length = mean(Sepal.Length),
            sd.Sepal.Length = sd(Sepal.Length),
            rows = n())

Ordenar datos arrange():

order1 <- iris %>%
  arrange(Sepal.Length)

order2 <- iris %>%
  arrange(desc(Sepal.Length))

# Combinación
iris %>%
  group_by(Species) %>%
  summarize(mean.Sepal.Length = mean(Sepal.Length),
            sd.Sepal.Length = sd(Sepal.Length),
            rows = n()) %>%
  arrange(mean.Sepal.Length)

Uniones de datos:

inner_join():

iris2 <- iris %>%
  mutate(id = row_number())

iris3 <- iris2 %>%
  filter(Species == "setosa") %>%
  mutate(Sepal.Length.6 = ifelse(Sepal.Length >= 6, "GE 6", "LT 6")) %>%
  mutate(Sepal.Length.rela = Sepal.Length / mean(Sepal.Length)) %>%
  select(id, Sepal.Length.6, Sepal.Length.rela)

iris4 <- iris2 %>%
  inner_join(iris3, by = c("id"))

left_join():

iris5 <- iris2 %>%
  left_join(iris3, by = c("id"))

anti_join():

iris6 <- iris2 %>%
  anti_join(iris3, by = c("id"))

Aquí tenéis una muestra de las posibilidades de dplyr y cómo se pueden combinar entre ellas. Creo que la sintaxis es bastante sencilla y se aprende con facilidad; si a mí no me está costando mucho… Saludos.