2017-10-10 3 views
1

J'essaie de convertir quelques colonnes d'un data.table qui ont une chaîne spécifique "_cat" dans leurs noms d'entier au type de données catégorique. Le nombre total de colonnes dans le fichier data.table est grand (plus de 700) et je ne veux pas passer en revue plus de 700 colonnes pour déterminer celles qui ont _cat dans leur nom pour changer le type de données. (Ils sont au hasard dans le data.table)convertir un grand nombre de colonnes data.table à factoriser en faisant correspondre simplement un modèle de chaîne dans les noms de colonnes

premier je reçois le tableau logique indiquant les colonnes ont « _cat » dans leur nom:

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

i ont en quelque sorte d'utiliser ce vecteur cat_id logique pour convertir les colonnes correspondantes avec TRUE dans cat_id à factoriser. Je ne sais pas comment utiliser la clause d'exclure les colonnes sans motif (ceux pour lesquels l'entrée de cat_id est FAUX)

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

Répondre

3

Ce n'est pas un groupe d'opérations. Pour sélectionner les colonnes, utilisez .SDcols puis attribuez-lui (:=) la sortie de retour aux colonnes d'intérêt

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

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