使用dplyr选择引用变量名称的位置

时间:2015-10-22 15:28:07

标签: r dplyr

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

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与存储为字符串的变量名称向量一起使用?

2 个答案:

答案 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帮助页面。