2017-10-10 4 views
1

Ich versuche, einige Spalten einer data.table zu konvertieren, die eine bestimmte Zeichenfolge "_cat" in ihren Namen von Integer haben zum kategorischen Datentyp. Die Gesamtzahl der Spalten in der data.tabelle ist groß (über 700) und ich möchte nicht mehr als 700 Spalten durchgehen, um herauszufinden, welche _cat in ihren Namen haben, um den Datentyp zu ändern. (Sie sind zufällig auf der ganzen data.table)Konvertieren Sie eine große Anzahl von data.table-Spalten zu Faktor, indem Sie nur ein Zeichenfolgenmuster in Spaltennamen

erste erhalte ich die logische Array angibt, welche Spalten ‚_cat‘ in ihren Namen haben:

cat_id <- grepl('_cat', colnames(dt)) 

irgendwie muss ich diese cat_id logische Vektor verwenden zu konvertieren die entsprechenden Spalten mit TRUE in cat_id zu factor. Ich bin mir nicht sicher, wie durch Klausel zu verwenden, um die Spalten ohne Muster auszuschließen (die, für die cat_id Eintrag FALSCH)

dt <- dt[, lapply(.SD, as.factor), by = ??? ] 

Antwort

3

Dies wird durch Operationen keine Gruppe ist. Für die Spalten der Auswahl verwendet .SDcols und weist (:=) den Ausgang zurück zu den Spalten von Interesse

dt[, (cat_id) := lapply(.SD, factor), .SDcols = cat_id ] 

wo

cat_id <- grep('_cat', colnames(dt), value = TRUE) 
Verwandte Themen