【问题标题】:dplyr: select columns by position in NSEdplyr:在 NSE 中按位置选择列
【发布时间】:2017-07-18 12:24:11
【问题描述】:

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

到目前为止,我已经尝试了以下方法:

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

但我收到以下错误:

解析错误(文本 = x): :1:2: 意外的“x”

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

有解决办法吗?

【问题讨论】:

  • 总是需要第一列,然后是某些列;其中返回的数据将是 col[1] 和 col[x,y,z] 的子集?
  • position

标签: r select dplyr nse


【解决方案1】:

使用 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)

【讨论】:

    【解决方案2】:

    使用mtcars 和:

    1. auto 添加为我的第一列
    2. 选择`c(自动,第一列,以及任何包含“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
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:
         Select.by.pos <- function(pos, dt){
        
           return(dt[, pos])
        
         }
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多