使用R

时间:2017-07-08 23:28:49

标签: r dplyr tidyr

我正在尝试使用R包gather()中的tidyr函数从要收集的列中删除列。

当我指定要收集的列时(这里,我将mpgcyldisp列收集到variable和{ {1}}列:

val

假设我有四个变量,而不是指定要收集哪个变量,我想指定在下一个案例中删除哪个(library(tidyverse) mtcars %>% select_("mpg", "cyl", "disp") %>% gather_("variable", "val", gather_cols = c("mpg", "cyl", "disp")) )。显然,这可能不起作用:

hp

使用mtcars %>% select_("mpg", "cyl", "disp", "hp") %>% gather_("var", "val", gather_cols = c(-"hp")) 的建议 - 如this question的答案 - 似乎不起作用。在one_of的现已关闭的GitHub issue中,建议使用tidyr,但这似乎也不起作用。

怎么可能 - 使用dplyr::select_vars()指定要使用标准评估删除哪些列?

2 个答案:

答案 0 :(得分:0)

我对tidyverse加载的内容及其管理环境有点不熟悉 - 我通常使用常规tidyr - 但使用tidyr::gather代替gather_,允许你使用这种语法:

# here, gather takes the "key" and "value" args as objects
# as does dplyr::select
# and allows for additional objects off the data.frame
# to be passed as additional args

mtcars %>% 
  dplyr::select(mpg, cyl, disp, hp) %>% 
  tidyr::gather(var, val, -hp)

答案 1 :(得分:0)

这个怎么样?

mtcars %>% 
    select_("mpg", "cyl", "disp", "hp") %>% 
    gather_("var", "val", select_vars(include = c('mpg', 'cyl', 'disp')))

或者如果要指定排除列:

mtcars %>% 
  select_("mpg", "cyl", "disp", "hp") %>% 
  gather(var, val, select_vars(include = -matches('hp')))