2016-06-16 21 views
1

Ich habe viele Datenframe-Spalten, die ich in Faktoren konvertieren möchte, ohne jedes einzelne Feld zu berücksichtigen. Wie kann ich über die Spaltennamen iterieren und wenn sie mit einem regulären Ausdruck übereinstimmen, sie in Faktoren umwandeln? Ich komme aus der Python Welt, und ich noch nicht Looping und String-Ersetzungen in R.R-Faktor alle Spalten, die Zeichenfolge enthalten

Pseudo-Code verstehen:

for name in df.columns.names: 
     if name matches "regex": 
      df$name <- factor(df$name) 
+0

'df = lapply (df, Funktion (x) if (is.character (x)) return (Faktor (x)) else return (x))'. – Gregor

+1

Aber der beste Ort für diese Änderungen ist, wenn Sie Daten einlesen. Sehen Sie sich das Spaltenklassenargument an, mit dem Sie Daten lesen. – Gregor

+0

'Bibliothek (dplyr); df%>% muate_each (funs (faktor), matches ('regex')) ' – alistaire

Antwort

1

Wahrscheinlich:

df[ , grepl('regex' , names(df)) ] <- 
            lapply(df[ , grepl('regex' , names(df)) ], factor) 

auch grep verwenden könnte in dieser Fall. Das Argument j von [ und [<- kann entweder logische oder numerische Argumente annehmen.

+1

Ich würde wahrscheinlich die' grepl (...) 'nach' idx' oder so etwas retten, dann kannst du einfach eine sauberere Aussage machen wie 'df [idx] <- lapply (df [idx], Faktor)' – thelatemail

+0

@thelatemail Ich verstehe nicht, was "idx" ist. Wo passiert der reguläre Ausdruck ohne Grep? –

+0

@erics - 'idx <- grepl ('regex', Namen (df))' - führe das zuerst aus, damit du den Code nicht zweimal wiederholen musst. – thelatemail

0

Wir verwenden type.convert

df[] <- lapply(df, function(x) type.convert(as.character(x))) 
Verwandte Themen