2017-07-28 5 views
0

Ich muss Hunderte von Variablen in einem Dataset umbenennen, und ich suche nach dem effizientesten Weg, dies zu tun. Wenn die Rohdaten importiert werden, generiert SAS generische Variablennamen wie "VarX", und in R ist es nur "VX". Meine Firma wechselt von SAS zu R, und der alte SAS-Code sah so aus: rename var23-var150=NRx1-NRx128; Das würde "var23" als "NRx1", dann "var24" als "NRx2" und so weiter umbenennen. Dies war eine sehr effiziente Kurzschrift in SAS. Ich weiß, dass ich etwas wie names(data)[x:y] = c("NRx1","NRx"2,etc) verwenden kann, um von Spalte x zu Spalte y zu lesen und jede Variable auf dem Weg umzubenennen. Das bedeutet, dass ich alle NRx-Variablen schreiben müsste, und das fühlt sich wie eine Zeitverschwendung an.Mehrere Variablen nacheinander in R umbenennen

Theres auch eine andere Reihe von Variablen nach dem NRx, für die der SAS-Code sah so aus rename var151-var278=TRx1-TRx128;. Alles in allem muss ich 250 Variablen umbenennen und ich brauche eine effiziente Möglichkeit, diesen Code zu schreiben. Ich bin ziemlich neu in R, daher werden alle Hinweise und Abkürzungen geschätzt. Vielen Dank im Voraus für Ihre Hilfe!

+3

Sie können 'paste0' vielleicht verwenden:' Namen (Daten) [x: y] = paste0 ("NRx", 1: 128) '. – lmo

+0

Unter der Annahme, dass diese Variablen den gleichen Datentyp speichern und verwandt sind, sollten Sie wahrscheinlich das Langformat ändern, anstatt Daten in Spaltennamen zu codieren. Dieses Papier hat eine Diskussion über die Art der Formatierung, die gut in R funktioniert, ziemlich ähnlich zu SQL https://www.jstatsoft.org/article/view/v059i10 – Frank

Antwort

1

Ich denke, Ihr erster Ansatz funktioniert gut, sondern alle neuen Namen als Eingabe aus, nur eine einfache Vektor der neuen gewünschten Namen erstellen:

names(data)[x:y] = paste0("NRx", 1:128) 

Sie können ganz einfach ändern, was zwischen den geht " und dann natürlich die endgültige Nummer für Ihre Bedürfnisse. Die 0 in paste0 bedeutet, dass in Ihrer Variablenbenennung kein Platz ist.

+0

Das hat perfekt funktioniert! Vielen Dank. –