Agrupe los tibbles por variables dadas como vectores de cadenas en un tibble anidado.
En un tibble anidado, me gustaría agrupar tibbles en una columna de lista (data
en el ejemplo a continuación) por variables dadas como vectores de strings (vars
).
toydata <- tibble::tibble(
vars = list(
list("x"),
list(c("x", "y"))
),
data = list(
tibble::tibble(
x = c(1,1,2,2),
y = c(1,1,1,2)
),
tibble::tibble(
x = c(1,1,2,2),
y = c(1,1,1,2)
)
)
)
Esto funciona:
purrr::map2(toydata$data,
toydata$vars,
~ dplyr::group_by(.x, !!!rlang::syms(unlist(.y)))
)
Pero ninguno de estos funciona:
toydata %>%
dplyr::mutate(
data = purrr::map2(toydata$data,
toydata$vars,
~ dplyr::group_by(.x, !!!rlang::syms(unlist(.y)))
)
)
toydata %>%
dplyr::mutate(
data = purrr::map2(data,
vars,
~ dplyr::group_by(.x, !!!rlang::syms(unlist(.y)))
)
)
¿Dónde estoy equivocado?
davy.ai
El problema está en el uso de
!!!
dentro de la funciónmutate()
. Dado quemutate()
ya está evaluando las variables en el contexto detoydata
, no es necesario usar!!!
. En su lugar, podemos usar!!!
directamente en la llamada a la funciónmap2()
para evaluar las variables dentro de cada tibble anidado. Aquí está el código corregido:Esto debería agrupar correctamente los tibbles en la columna
data
según las variables dadas en la columnavars
.