dplyr:在NSE中按位置选择列

时间:2017-02-27 18:39:58

标签: r select dplyr nse

我正在尝试创建一个函数,根据它们的位置选择DF中的列。我将始终需要第一列,然后是DF的子集。我需要为每个子集选择一个对象。

到目前为止,我已尝试过以下内容:

{{1}}

但是我收到以下错误:

  

解析时出错(text = x):: 1:2:意外' x'

似乎问题是列位置的逗号分隔。

有解决方法吗?

4 个答案:

答案 0 :(得分:20)

您可以将select与索引的数字向量一起使用:

positions <- c(1,28:31)
DF %>% select(positions)

答案 1 :(得分:2)

使用mtcars和:

  1. 添加auto作为我的第一栏
  2. 选择`c(自动,第一列,以及包含&#39; a&#39;的任何列)
  3. 数据的子集,其中只有数字行的总和大于这些行的所有总和的平均值
  4. mtcars %>% mutate(auto = row.names(.)) %>% select(auto, 1, contains('a')) %>% dplyr::filter(rowSums(.[-1]) > mean(rowSums(.[-1])))

                 auto  mpg drat am gear carb
    1       Mazda RX4 21.0 3.90  1    4    4
    2   Mazda RX4 Wag 21.0 3.90  1    4    4
    3      Datsun 710 22.8 3.85  1    4    1
    4       Merc 240D 24.4 3.69  0    4    2
    5        Merc 230 22.8 3.92  0    4    2
    6        Merc 280 19.2 3.92  0    4    4
    7        Fiat 128 32.4 4.08  1    4    1
    8     Honda Civic 30.4 4.93  1    4    2
    9  Toyota Corolla 33.9 4.22  1    4    1
    10      Fiat X1-9 27.3 4.08  1    4    1
    11  Porsche 914-2 26.0 4.43  1    5    2
    12   Lotus Europa 30.4 3.77  1    5    2
    13   Ferrari Dino 19.7 3.62  1    5    6
    14  Maserati Bora 15.0 3.54  1    5    8
    15     Volvo 142E 21.4 4.11  1    4    2
    

答案 2 :(得分:0)

 Select.by.pos <- function(pos, dt){

   return(dt[, pos])

 }

pos参数不应该是字符串而是数字矢量:) dt是数据帧

答案 3 :(得分:0)

使用dplyr的另一种解决方案:

DF %>%
  select(!!c(1, 28:31))

cf:https://www.rdocumentation.org/packages/dplyr/versions/0.7.6/topics/select

您也可以与dplyr version 0.8

一起使用
DF %>%
      select(1, 28:31)