tidyr :: expand获取tibble的名称作为要扩展的变量?

时间:2019-01-10 18:54:20

标签: r dplyr tidyverse tidyr

我正在寻找更通用的data.frame扩展(表或小标题)。该代码将更好地解释我的意思。这是我按meansd列扩展dt的时间。

dt <- tibble::tibble(
  mean = c(10,20,30),
  sd = c(1,2,3),
  median = c(3,4,5)
) 
dt %>% tidyr::expand(., mean, sd)

我正在搜索更通用的东西,例如这样的东西,它不起作用:

dt %>% tidyr::expand(., list("mean", "sd"))

即使我可以在扩展时指定更复杂的逻辑(也无法正常工作):

exp.cols <- dt %>% names(.) %>% .[stringr::str_detect(., "d")]
dt %>% tidyr::expand(., exp.cols)

数据可能来自外部位置,因此没有选项可以过滤然后在所有列上进行扩展。

1 个答案:

答案 0 :(得分:1)

一种选择是转换为符号(syms)并求值(!!

library(dplyr)
dt %>% 
  tidyr::expand(!!! rlang::syms(list("mean", "sd")))

或使用列名

dt %>% 
  tidyr::expand(!!! rlang::syms(names(.)[1:2]))
# A tibble: 9 x 2
#   mean    sd
#  <dbl> <dbl>
#1    10     1
#2    10     2
#3    10     3
#4    20     1
#5    20     2
#6    20     3
#7    30     1
#8    30     2
#9    30     3