按嵌套 tibble 中作为字符串向量给出的变量对 tibble 进行分组

Posted

技术标签:

【中文标题】按嵌套 tibble 中作为字符串向量给出的变量对 tibble 进行分组【英文标题】:Group tibbles by variables given as string vectors in a nested tibble 【发布时间】:2022-01-07 19:41:49 【问题描述】:

在嵌套的 tibble 中,我想通过以字符串向量 (vars) 形式给出的变量对列表列中的 tibbles 进行分组(在下面的示例中为 data)。

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)
    )
  )
)

这行得通:

purrr::map2(toydata$data, 
            toydata$vars, 
            ~ dplyr::group_by(.x, !!!rlang::syms(unlist(.y)))
)

但这些都不起作用:

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)))
                       )
  )

我哪里错了?

【问题讨论】:

【参考方案1】:

您可以在group_by 中使用整齐选择动词。在这里你可以使用all_of(或any_of,取决于你想要什么):

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

【讨论】:

非常感谢!我没有想出在group_by 中使用across

以上是关于按嵌套 tibble 中作为字符串向量给出的变量对 tibble 进行分组的主要内容,如果未能解决你的问题,请参考以下文章

R语言使用dplyr包的select函数基于字符串向量vector中的字段名称筛选dataframe或者tibble中的数据( Select varibales)

在 tibble 中的嵌套级别之间移动:如何引用存储在嵌套层次结构的上层中的数据

使用数据库中的时间作为字符串变量按升序对 ListView 上的数据进行排序?

如何在 group_nest 之后取消嵌套 tibble?

将带有嵌套列表的列表转换为带有嵌套数据框的单行小标题

APL Dyalog嵌套数组元素转换