2016-07-19 8 views
1

Ich versuche Spalten in einem Datenrahmen in R basierend auf dem Spaltennamen auszuwählen. Ich möchte Spalten, in denen der Spaltenname entweder "activity", "subject" oder "originaldataset" enthält oder mit "mean()" oder "std()" endet. Als ichR Regex Escape funktioniert nicht mit Variablennamen

colselection <- grep('mean\\(\\)$|std\\(\\)$|subject|activity|originaldataset', 
        colnames(completedf)) 
selectdf <- completedf[,colselection] 

bekomme ich nur Spalten mit "Aktivität", "Thema" oder "originaldataset", keine mit der Endung "mean()" oder "std()". Hinweis: "completedf" ist der ursprüngliche vollständige Datenrahmen.

Beispiele für Spaltennamen: tBodyAccMag-Mittelwert(), tBodyAccMag-STD(), tBodyAccJerkMag-Mittelwert(), tBodyAccJerkMag-STD(). Die Namen werden aus einer Textdatei mit gelesen und die Spalte mit den Namen wird in einen Zeichenvektor eingefügt, der später für die Spaltennamen im Datenrahmen "completedf" verwendet wird.

Ich benutze R Studio Version 0.99.902 mit R-Version 3.2.3 (2015-12-10) auf Ubuntu 16.10.

+2

Sie entkommen die '$', die nicht benötigt wird, dh 'grep ('bedeuten \\ (\\) $ | std \\ (\\) $ | Betreff | Aktivität | Originaldataset', Spaltennamen (completedf)) ' – akrun

+0

In' R' brauchen wir \\ und nicht single \. – akrun

+0

Wenn ich 'code'grep ('mean \\ (\\) $', Spaltennamen (completedf), Wert = TRUE)', bekomme ich einen leeren Zeichenvektor. Ich bekomme auch einen leeren Zeichenvektor ohne $. Seltsam. – ElToro1966

Antwort

0

Ich habe es gerade dank der Teilnehmer eines R-Kurses herausgefunden, den ich gerade befolge.

Spaltennamen dürfen in R keine Klammern enthalten, daher ersetzt R die Klammern durch Interpunktionszeichen.

Zum Beispiel:

fBodyBodyGyroJerkMag.std()

wird

fBodyBodyGyroJerkMag.std ..

und so weiter. Deshalb funktioniert die Regex mit Interpunktionszeichen, während die mit Klammern nicht funktioniert.