wake-up-neo.com

dplyr: Wählen Sie die Spalten nach Position in NSE aus

Ich versuche, eine Funktion zu erstellen, die Spalten in einem DF nach ihrer Position auswählt. Ich werde immer die erste Spalte und dann eine Teilmenge des DF benötigen. Ich habe 1 Objekt für jede Teilmenge, die ich auswählen muss.

Bisher habe ich folgendes versucht:

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

ich erhalte jedoch die folgende Fehlermeldung:

Fehler bei der Analyse (Text = x):: 1: 2: unerwartetes 'x'

Es scheint, dass das Problem die Kommatrennung in der Spaltenposition ist.

Gibt es eine Problemumgehung?

8
Jordi Vidal

Sie können select einfach mit einem numerischen Vektor von Indizes verwenden:

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

Verwenden von mtcars und:

  1. füge auto als erste Spalte hinzu
  2. wähle c (auto, die erste Spalte und jede Spalte, die ein 'a' enthält)
  3. subset die Daten, bei denen nur die Summen numerischer Zeilen größer sind als der Mittelwert aller Summen dieser Zeilen

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

Eine andere Lösung mit Dplyr:

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

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

Sie können auch mit dem dplyr version 0.8 verwenden.

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

   return(dt[, pos])

 }

Das pos-Argument sollte kein String sein, sondern ein numeeischer Vektor. Dt ist ein Datenrahmen

0