【问题标题】:Using dplyr's select where variable names are quoted [duplicate]在引用变量名的地方使用 dplyr 的选择 [重复]
【发布时间】:2016-01-21 22:53:57
【问题描述】:

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

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

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    首先,您可以在dplyr中进行选择

    iris %>% select(Species, contains(".Width"))
    

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

    width.vars <- c("Sepal.Width", "Petal.Width")
    iris %>% select(Species, one_of(width.vars))
    

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

    【讨论】:

    • 感谢您的回答,但正如我在问题中所说,我知道select,我对那些我想对集合执行更复杂功能的情况感兴趣变量名。
    • 这就是one_of 的作用,如上所示。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-07-04
      • 2021-10-22
      • 2016-07-30
      • 2020-10-16
      • 2023-02-01
      • 2017-06-10
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      相关资源
      最近更新 更多