2017-05-11 4 views
0

Ich habe einen Datenrahmen mit Spalten, die ich neu anordnen möchte. In verschiedenen Iterationen meines Skripts kann sich jedoch die Gesamtzahl der Spalten ändern.Aufruf Variablen nach Name und Spalte Nummer in einem data.frame

>Fruit 
Vendor A B C D E ... Apples Oranges 
Otto 4 5 2 5 2 ... 3  4 

Fruit2<-Fruit[c(32,33,2:5)] 

Anstatt also den Code manuell anzupassen (die Spalten 32 und 33 ändern) Ich möchte folgendes tun:

Fruit2<-Fruit[,c("Apples", "Oranges", 2:5)] 

Ich habe versucht, ein paar Syntaxen aber nicht bekommen könnte Mach was ich will. Ich weiß, das ist ein einfaches Syntaxproblem, aber ich konnte die Lösung noch nicht finden. Die Idee ist, den Variablennamen mit dem Vektor zu mischen, um die Spalten beim Schreiben eines neuen Datenrahmens zu referenzieren. Ich möchte nicht den ganzen Vektor in Variablennamen buchstabieren, weil es in Wirklichkeit 30 Variablen sind.

+3

'Obst [, c (" Äpfel "," Orangen ", Namen (Obst) [2: 5])] würde funktionieren –

Antwort

0

Ich bin nicht sicher, wie Sie Ihre Daten in R gespeichert ist, so ist dies, was ich verwendet:

Fruit <- data.frame("X1" = c("A",4),"X2" = c("B",5),"X3" = c("C",2),"X4"= 
c("D",5),"X5"= c("E",2),"X6" = c("Apples",3),"X7"= 
c("Oranges",4),row.names = c("Vendor","Otto"),stringsAsFactors = FALSE) 

      X1 X2 X3 X4 X5  X6  X7 
    Vendor A B C D E Apples Oranges 
    Otto 4 5 2 5 2  3  4 

Dann nutzen:

indexes <- which(Fruit[1,]%in%c("Apples","Oranges")) 
Fruit2<- Fruit[,c(indexes,2:5)] 

Obst [1] verweist auf die Lieferanten Reihe und "% in%" gibt einen logischen Vektor an die Funktion "which" zurück. Dann gibt "which" Indizes zurück.

Dies gibt:

> Fruit2 
       X6  X7 X2 X3 X4 X5 
    Vendor Apples Oranges B C D E 
    Otto  3  4 5 2 5 2 

Stellen Sie sicher, dass Ihre Daten nicht als Faktoren gespeichert werden, sonst wird dies nicht funktionieren. Oder Sie können die Herstellerzeile in Spaltennamen gemäß dem obigen Kommentar ändern.

0

Die Antwort ist, wie ich herausgefunden habe, das dplyr-Paket. Es ist sehr mächtig.

Die Lösung für das oben erwähnte Problem wäre:

Fruit2<-Fruit %>% select(Apples,Oranges,A:E) 

Diese dynamische Auswahl von Spalten und Listen von Spalten ermöglicht es, auch wenn die Indizes der Spalten ändern.

Verwandte Themen