通常我会想要选择子集是函数结果的变量子集.在这个简单的例子中,我首先得到所有与宽度特征有关的变量名
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)
首先,你可以做的选择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所有可用选项,请参阅帮助页面.