2016-09-23 3 views
4

Ich lese in einer Reihe von CSVs, die Zeug wie "Umsatz - Tausende" im Titel haben und in R als "Umsatz ... Tausende" kommen. Ich würde gerne einen regulären Ausdruck (oder eine andere einfache Methode) verwenden, um diese zu bereinigen.Ersetzen Sie Zeichen in Spaltennamen gsub

Ich kann nicht herausfinden, warum das nicht funktioniert:

#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" 

aber dieser Code tut:

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

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

Bitte beachte, dass ich mich gut eine Periode zwischen den Worten zu verlassen, wenn das auftritt, .

Vielen Dank.

+2

Ersetzung tritt lokal innerhalb der Funktion auf, nicht global. Wenn Sie in der letzten Zeile der Funktion (x) 'zurückgeben, erhalten Sie den aktualisierten Datenrahmen. –

+0

Danke für die schnelle Antwort! Können Sie die Funktion so schreiben, wie sie geschrieben werden muss? Ich habe versucht, "' '' '' '' '' zurück in den Code zu bringen und bekomme nicht die Ergebnisse, die ich erwarte. Ich kann es bekommen, um die Spaltennamen auszudrucken oder einen Datenrahmen mit den neuen Spaltennamen auszudrucken, aber keiner der Versuche hat tatsächlich den Datenrahmen in der globalen Umgebung verändert. – yake84

+0

müssen Sie auch den aktualisierten Datenrahmen verwenden, um den vorhandenen Datenrahmen zu überschreiben oder einer neuen Variablen zuzuweisen. Der ursprüngliche Datenrahmen wird nicht durch die Funktion selbst geändert, selbst wenn Sie 'return (x)' zurückgeben. – dracodoc

Antwort

2

Rich Scriven hatte die Antwort:

definieren

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

und tun dann

a <- colClean(a) 

a kann

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

Sie gsub Spaß zu aktualisieren verwenden ction ersetzen . durch ein anderes Sonderzeichen wie #.