使用dplyr';s选择引用变量名的位置

使用dplyr';s选择引用变量名的位置,r,dplyr,R,Dplyr,通常我会选择变量的子集,其中子集是函数的结果。在这个简单的例子中,我首先得到与宽度特征相关的所有变量名 library(dplyr) library(magrittr) data(iris) width.vars <- iris %>% names %>% extract(grep(".Width", .)) 能够使用这些返回作为选择列的一种方式是很有用的(虽然我知道contains()及其同级存在,但我

通常我会选择变量的子集,其中子集是函数的结果。在这个简单的例子中,我首先得到与宽度特征相关的所有变量名

library(dplyr)
library(magrittr)

data(iris)

width.vars <- iris %>% 
                names %>% 
                extract(grep(".Width", .))
能够使用这些返回作为选择列的一种方式是很有用的(虽然我知道
contains()
及其同级存在,但我想执行大量更复杂的子集,为了本例的目的,这个示例变得很简单

如果我试图使用此函数作为选择列的方法,则会发生以下情况:

iris %>% 
  select(Species,
         width.vars)

Error: All select() inputs must resolve to integer column positions.
The following do not:
*  width.vars

如何使用
dplyr::select
和存储为字符串的变量名向量?

首先,您可以使用

iris %>% select(Species, contains(".Width"))
不需要单独创建名称向量。但是如果确实有列列表作为字符串名称,则可以这样做

width.vars <- c("Sepal.Width", "Petal.Width")
iris %>% select(Species, one_of(width.vars))
width.vars%选择(物种,一个(width.vars))

有关所有可用选项,请参见
?选择
帮助页面。

dplyr
中,大多数命令都有一个替代版本,该版本以接受字符串作为输入的“\u”结尾;在本例中,
选择
。这些通常是以编程方式使用
dplyr
时必须使用的

iris %>% select_(.dots=c("Species",width.vars))

谢谢你的回答,但正如我在问题中所说的,我知道
select
,我对那些我想对一组变量名执行更复杂的函数的情况很感兴趣。因此,这也是
一个
所能做的,如上所示。
iris %>% select_(.dots=c("Species",width.vars))