使用dplyr的select来引用变量名称

tom*_*omw 9 r dplyr

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

library(dplyr)
library(magrittr)

data(iris)

width.vars <- iris %>% 
                names %>% 
                extract(grep(".Width", .))
Run Code Online (Sandbox Code Playgroud)

哪个回报:

>width.vars
 [1] "Sepal.Width" "Petal.Width"
Run Code Online (Sandbox Code Playgroud)

能够使用这些返回作为选择列的方式是有用的(虽然我知道它contains()和它的兄弟存在,但是我想要执行许多更复杂的子集,并且这个例子对于这个例子来说是微不足道的.这个例子的目的.

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

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

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

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

Cra*_*aig 19

在内部dplyr,大多数命令都有一个替代版本,以"_"结尾,接受字符串作为输入; 在这种情况下,select_.这些通常是您在以dplyr编程方式使用时必须使用的内容.

iris %>% select_(.dots=c("Species",width.vars))
Run Code Online (Sandbox Code Playgroud)


MrF*_*ick 6

首先,你可以做的选择dplyr

iris %>% select(Species, contains(".Width"))
Run Code Online (Sandbox Code Playgroud)

无需单独创建名称向量.但是如果你确实有一个列的列表作为字符串名称,你可以这样做

width.vars <- c("Sepal.Width", "Petal.Width")
iris %>% select(Species, one_of(width.vars))
Run Code Online (Sandbox Code Playgroud)

有关?select所有可用选项,请参阅帮助页面.

  • 所以这就是`one_of`也会如上所示. (2认同)