web-dev-qa-db-fra.com

dplyr: sélection des colonnes par position dans NSE

J'essaie de créer une fonction qui sélectionnera les colonnes dans un DF en fonction de leur position. J'aurai toujours besoin de la première colonne, puis d'un sous-ensemble du FD. J'ai 1 objet pour chaque sous-ensemble que je dois sélectionner.

Jusqu'ici j'ai essayé ce qui suit:

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

mais je reçois l'erreur suivante:

Erreur lors de l'analyse (text = x):: 1: 2: 'x' inattendu

Il semblerait que le problème réside dans la séparation par des virgules dans la position de la colonne.

Y at-il un travail autour?

8
Jordi Vidal

Vous pouvez simplement utiliser select avec un vecteur numérique d'index:

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

Utiliser mtcars et:

  1. ajouter auto comme première colonne
  2. sélectionnez `c (auto, la première colonne et toute colonne contenant un 'a')
  3. sous-ensemble des données où seules les sommes des lignes numériques sont supérieures à la moyenne de toutes les sommes de ces lignes

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
Carl Boneri

Une autre solution avec dplyr:

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

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

Vous pouvez également utiliser avec le dplyr version 0.8

DF %>%
      select(1, 28:31)
0
Dimitri Petrenko
 Select.by.pos <- function(pos, dt){

   return(dt[, pos])

 }

L'argument pos ne doit pas être une chaîne mais un vecteur numérique :) dt est une image

0
Eligijus Bujokas