2013-06-17 2 views
12

Ich verwende R, um einige Daten vor der Verarbeitung zu tun, und hier ist das Problem, mit dem ich konfrontiert bin: Ich gebe die Daten mit read.csv(filename,header=TRUE), und dann der Platz in Variablennamen wurde ".", Zum Beispiel eine Variable namens Voller Code wurde Full.Code im generierten Datenframe. Nach der Verarbeitung verwende ich write.xlsx(filename), um die Ergebnisse zu exportieren, während die Variablennamen geändert werden. Wie man dieses Problem anspricht?So ersetzen Sie das "." in Spaltennamen, die von read.csv() mit einem Leerzeichen beim Exportieren generiert werden?

Außerdem in der Ausgabe .xlsx Datei, die erste Spalte werden Indizes (d. H. 1 bis N), was ist nicht das, was ich erwarte.

+4

kann es vermeiden, die Namen zu korrigieren, indem man 'read.csv' mit der Option' check.names = FALSE' aufruft. –

Antwort

22

Wenn Sie check.names=FALSE in read.csv eingestellt haben, wenn Sie die Daten einlesen, werden die Namen nicht geändert und Sie müssen sie nicht bearbeiten, bevor Sie die Daten zurückschreiben. Dies bedeutet natürlich, dass Sie die Spaltennamen angeben müssen (in einigen Fällen zurückgesetzte Anführungszeichen) oder sich bei der Bearbeitung auf die Spalten nach Ort und nicht nach dem Namen beziehen.

+0

Ich denke, die Verwendung von 'check.names = FALSE' ist eine bessere Wahl als das Bearbeiten der Spaltennamen, obwohl das erneute Lesen der Daten viel Arbeit für mich beinhaltet. Alles in allem, danke für deine Antwort! Das hilft mir wirklich sehr. –

8

Leerzeichen in den Namen zurück, dies zu tun (rechts, bevor Sie exportieren - R hat Sie in Variablennamen Leerzeichen lassen, aber es ist ein Schmerz):

# A simple regular expression to replace dots with spaces 
# This might have unintended consequences, so be sure to check the results 
names(yourdata) <- gsub(x = names(yourdata), 
         pattern = "\\.", 
         replacement = " ") 

der ersten Spalte Index löschen Fügen Sie einfach row.names = FALSE zu Ihrer write.xlsx() hinzu. Das ist ein häufiges Argument für Funktionen, die Daten im Tabellenformat ausgeben (write.csv() hat es auch).

+0

Vielen Dank! Die 'gsub()' Funktion funktioniert gut. Aber ich habe noch eine Frage: Warum sollten wir zwei _escapes_ benutzen anstatt einfach 'pattern =" \. "'? –

+0

@zenotsang Gute Frage - Ich bin mir nicht sicher, warum R das erfordert. –

+2

Der erste Escape-Befehl wird verwendet, wenn der R-Parser die Zeichenfolge syntaktisch analysiert. Dies hinterlässt ein '\' für den regulären Ausdruck. Wenn Sie den regulären Parser umgehen, können Sie mit einem einzelnen Backslash davonkommen (aber das ist wahrscheinlich mehr Arbeit, als es wert ist). –

3

Hier ist eine Funktion (sorry, ich weiß, es Refactoring werden könnte), die auch schön Spaltennamen macht, wenn es mehrere aufeinander folgende Punkte und Hinter Punkte:

makeColNamesUserFriendly <- function(ds) { 
    # FIXME: Repetitive. 

    # Convert any number of consecutive dots to a single space. 
    names(ds) <- gsub(x = names(ds), 
        pattern = "(\\.)+", 
        replacement = " ") 

    # Drop the trailing spaces. 
    names(ds) <- gsub(x = names(ds), 
        pattern = "()+$", 
        replacement = "") 
    ds 
} 

Beispiel Nutzung: Sie

ds <- makeColNamesUserFriendly(ds) 
Verwandte Themen