Agrupar y encontrar la intersección entre grupos en tidyverse.
Estoy intentando agrupar y encontrar la intersección entre los grupos definidos por “group_by” utilizandotidyverse .
datos de ejemplo:
data = tibble(feature = paste0(“Group_”, sample(1:800, 1000, replace = T)),classifier = paste0(“Classifier_”, sample(1:3, 1000, replace = T)))
los datos se ven así:
A tibble: 1,000 x 2 feature classifier
1 Group_629 Classifier_2
2 Group_549 Classifier_1
3 Group_565 Classifier_1
4 Group_584 Classifier_2
5 Group_181 Classifier_2
6 Group_359 Classifier_3
7 Group_135 Classifier_1
8 Group_676 Classifier_3
9 Group_731 Classifier_1
10 Group_694 Classifier_2 # … con 990 filas más
Estoy tratando de “group_by(classifier)” y encontrar la “intersect()” entre todos los grupos.
Código:
datos = tibble(feature = paste0(“Group_”, sample(1:800, 1000, replace = T)),
classifier = paste0(“Classifier_”, sample(1:3, 1000, replace = T))) %>%
group_by(classifier) %>%
mutate(intersect = intersect(feature))
produce este error:
Error: Problema con la entrada intersect
en mutate()
.
x falta el argumento “y”, sin un valor por defecto
ℹ La entrada intersect
es intersect(feature)
.
ℹ El error ocurrió en el grupo 1: classifier = “Classifier_1”.
Ejecute rlang::last_error()
para ver dónde se originó el error.
Porque no estoy proporcionando 2 argumentos para intersect.
¿Alguien tiene una solución para esto? Muchas gracias.
davy.ai
Para encontrar la intersección (
intersect
) entre todos los grupos definidos porgroup_by
utilizandotidyverse
, podemos utilizar la funciónpull
para extraer la columna defeature
, agrupar (group_by
) la columna declassifier
, y luego aplicar la funciónintersect
utilizandoreduce
del paquetepurrr
. Aquí está el código:“`{r}
library(tidyverse)
data %>%
group_by(classifier) %>%
pull(feature) %>%
reduce(intersect)
“`
Esto dará como resultado la intersección (
intersect
) de todos los grupos definidos porgroup_by(classifier)
. Note que la funciónreduce
aplica la funciónintersect
a cada grupo de manera iterativa.¡Espero que esto ayude!