es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema está en el uso de !!! dentro de la función mutate(). Dado que mutate() ya está evaluando las variables en el contexto de toydata, no es necesario usar !!!. En su lugar, podemos usar !!! directamente en la llamada a la función map2() para evaluar las variables dentro de cada tibble anidado. Aquí está el código corregido:

    toydata %>%
      mutate(
        data = purrr::map2(
          data,
          vars,
          ~ dplyr::group_by(.x, !!!rlang::syms(unlist(.y)))
        )
      )
    

    Esto debería agrupar correctamente los tibbles en la columna data según las variables dadas en la columna vars.

Comments are closed.