web-dev-qa-db-fra.com

Remplacer les caractères dans les noms de colonne gsub

Je lis dans un tas de CSV qui ont des choses comme "ventes - des milliers" dans le titre et entrent dans R comme "ventes ... des milliers". Je voudrais utiliser une expression régulière (ou une autre méthode simple) pour les nettoyer.

Je ne peux pas comprendre pourquoi cela ne fonctionne pas:

#mock data
  a <- data.frame(this.is.fine = letters[1:5],
                  this...one...isnt = LETTERS[1:5])

#column names
  colnames(a)
  # [1] "this.is.fine"  "this...one...isnt"

#function to remove multiple spaces
  colClean <- function(x){
    colnames(x) <- gsub("\\.\\.+", ".", colnames(x))
  }

#run function
  colClean(a)

#names go unaffected
  colnames(a)
  # [1] "this.is.fine"  "this...one...isnt"

mais ce code fait:

#direct change to names
  colnames(a) <- gsub("\\.\\.+", ".", colnames(a))

#new names
  colnames(a)
  # [1] "this.is.fine"  "this.one.isnt"

Notez que je vais bien laisser une période entre les mots lorsque cela se produit.

Je vous remercie.

8
yake84

Rich Scriven avait la réponse:

Définir

colClean <- function(x){ colnames(x) <- gsub("\\.\\.+", ".", colnames(x)); x } 

et ensuite

a <- colClean(a) 

mettre à jour un

8
yake84
names(a) <- gsub(x = names(a), pattern = "\\.", replacement = "#")  

vous pouvez utiliser la fonction gsub pour remplacer . avec un autre caractère spécial comme #.

16
Rajnish Kumar