我经常想要选择子集是函数结果的变量子集。在这个简单的例子中,我首先得到所有与宽度特征相关的变量名称
library(dplyr)
library(magrittr)
data(iris)
width.vars <- iris %>%
names %>%
extract(grep(".Width", .))
返回:
>width.vars
[1] "Sepal.Width" "Petal.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
与存储为字符串的变量名称向量一起使用?
答案 0 :(得分:19)
在dplyr
内,大多数命令都有一个替代版本,以“_”结尾,接受字符串作为输入;在这种情况下,select_
。这些通常是您以编程方式使用dplyr
时必须使用的内容。
iris %>% select_(.dots=c("Species",width.vars))
答案 1 :(得分:6)
首先,您可以使用
在dplyr
中进行选择
iris %>% select(Species, contains(".Width"))
无需单独创建名称向量。但是如果你确实有一个列的列表作为字符串名称,你可以做
width.vars <- c("Sepal.Width", "Petal.Width")
iris %>% select(Species, one_of(width.vars))
有关所有可用选项,请参阅?select
帮助页面。