web-dev-qa-db-ja.com

dplyr:NSEでの位置による列の選択

DFの位置に基づいて列を選択する関数を作成しようとしています。常に最初の列とDFのサブセットが必要です。各サブセットに1つのオブジェクトがあります。選択する必要があります。

これまでのところ、私は次のことを試しました:

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

しかし、次のエラーが表示されます。

Parse(text = x)のエラー::1:2:予期しない 'x'

問題は列位置のカンマ区切りにあるように思われます。

回避策はありますか?

10
Jordi Vidal

インデックスの数値ベクトルでselectを使用できます。

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

mtcarsおよび次を使用:

  1. 最初の列としてautoを追加
  2. 「c(auto、最初の列、および「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
2
Carl Boneri

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)
1
Mostafa
 Select.by.pos <- function(pos, dt){

   return(dt[, pos])

 }

Pos引数は文字列ではなく、数値ベクトルでなければなりません:) dtはデータフレームです

0