dplyr:按位置选择列的非标准评估(NSE)

28

我正在尝试创建一个函数,它会根据列的位置选择DF中的列。我总是需要第一列,然后是DF的子集。每个需要选择的子集都有一个对象。

到目前为止,我尝试过以下方法:

position <- "1,28:31"
DF %>%
  select_(.dots = position)

但是我收到了以下错误:

Error in parse(text = x) : :1:2: unexpected 'x'

看起来问题在于列位置上的逗号分隔。

是否有解决方法?


始终需要第一列,然后是特定的列;返回的数据将是col [1]和col [x,y,z]的子集? - Carl Boneri
position<-c('1','28:31') 可以正常工作。 - Shenglin Chen
4个回答

49

您只需使用具有数字索引向量的select函数:

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

6

请问,在R中,!!的用法叫什么名字? - ah bon

2

使用mtcars数据集,实现以下功能:

  1. auto作为第一列添加到数据中
  2. 选择包含字母'a'的第一列和任意其他列
  3. 筛选数值行的和大于所有数值行和均值的数据

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

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

   return(dt[, pos])

 }

pos参数不应该是字符串,而应该是数值向量 :) dt是一个数据框


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接