2016-05-16 14 views
0

So wählen Sie bestimmte Zeilen aus; spezifische Spaltennamen; und eine andere Gruppe von spezifischen Spaltennamen basierend auf einem Vektor?Wählen Sie Zeilen, Spalten und eine andere Gruppe von Spalten basierend auf Vektor

Meine Daten:

#my data 
ID<-c(1,2,3,4,5,6) 
Month<-c('Jan','Jan','Mar','Feb','Mar','Jan') 
Number<-c(6,5,4,3,2,1) 
Color<-c('Red','Red','Blue','Green','Green','Purple') 
Q1<-c(0,1,NA,1,0,1) 
Q2<-c(1,1,NA,1,NA,1) 
Q3<-c(NA,0,0,1,0,1) 

mydata<-cbind.data.frame(ID,Month,Number,Color,Q1,Q2,Q3) 

#my vector: 
Jan.vector<-c('Q1','Q3') 

Ich habe (mydata):

enter image description here

  1. Ich möchte die Zeilen auswählen, in dem Monat 'Jan'
  2. ist und Spaltennamen wählen 'ID' und 'Monat'
  3. Und wählen Sie Spaltennamen, die in t sind er Vektor 'Jan.vector'. I kann nicht die tatsächlichen Spaltennamen auflisten, weil sie sich ändern.
  4. Ich mag die resultierenden Zeilen und Spalten nur, alles in einem Datensatz als unten:

ich will (mydata2):

enter image description here

(Hintergrund: Meine tatsächliche Datenmenge Hunderte von Spalten und und ich werde Spalten basierend auf dem Vektor auswählen, der sich monatlich ändern wird (dh Q1, Q3 ...). Der Vektor wird das einzige sein, was sich ändert. Ich werde die benötigten Fragen nicht wissen und brauchen sich auf den Vektor verlassen, um die Frageziffern auszuwählen Die Spaltenreihenfolge wi Ich werde mich auch ändern).

Antwort

1

, wenn ich Sie richtig verstanden:

> monthNum <- 1 
> wantedCol <- c('ID','Month','Color','Q1','Q3') 
> mydata[ mydata$Month==substring(month.name[monthNum],1,3),match(wantedCol,names(mydata))] 
    ID Month Color Q1 Q3 
1 1 Jan Red 0 NA 
2 2 Jan Red 1 0 
6 6 Jan Purple 1 1 

oder - Sie können den oder die Monate von angeben kann:

> monthName <- c('Jan','Mar') 
> wantedCol <- c('ID','Month','Color','Q1','Q3') 
> mydata[ mydata$Month %in% monthName,match(wantedCol,names(mydata))] 
    ID Month Color Q1 Q3 
1 1 Jan Red 0 NA 
2 2 Jan Red 1 0 
3 3 Mar Blue NA 0 
5 5 Mar Green 0 0 
6 6 Jan Purple 1 1 

oder Sie können Ihre Spalten von Indizes angeben:

> monthName <- c('Jan','Mar') 
> wantedCol <- c(1,2,4,5,7) 
> mydata[ mydata$Month %in% monthName,wantedCol] 
    ID Month Color Q1 Q3 
1 1 Jan Red 0 NA 
2 2 Jan Red 1 0 
3 3 Mar Blue NA 0 
5 5 Mar Green 0 0 
6 6 Jan Purple 1 1 

oder wenn Sie immer ID, Monat und Farbe möchten:

> monthNum <- 1 
> wantedColStat <- c('ID','Month','Color') 
> wantedColDyna <- c('Q1','Q3') 
> mydata[ mydata$Month==substring(month.name[monthNum],1,3),match(c(wantedColStat,wantedColDyna),names(mydata))] 
    ID Month Color Q1 Q3 
1 1 Jan Red 0 NA 
2 2 Jan Red 1 0 
6 6 Jan Purple 1 1 
+0

Danke für Ihre Hilfe! Gibt es eine Möglichkeit, zusätzliche Spaltennamen auszuwählen, die nicht im Vektor "wantedCol" enthalten sind? Zum Beispiel kann der Vektor nur Spaltennamen Q1 und Q3 enthalten. Kann ich aber die anderen Spaltennamen (ID, Monat, Farbe) nach Namen auflisten? Oder können Q1 und Q3 in einem eigenen Vektor sein, während andere Spaltennamen in einem separaten Vektor sind? – Mary

+0

sicher .... ich werde bearbeiten –

Verwandte Themen