Kapitel 56 Variablennamen bearbeiten

Wie so oft, gibt es auch für das Ändern von Variablennamen in R knapp 1000 Lösungen.

Hier ein Tutorial oder hier 52 Wege zum Ändern der Variablennamen.

56.0.1 Pakete

library(dplyr)
library(stringr)
library(janitor)

56.1 Suchen und Ersetzen von Teilen der Variablennamen

Im folgenden Beispiel wollen wir bestimmte Teile der Variablennamen ändern.

id=1:100
gender=sample(c("Women","Men"), size=100, rep=TRUE)
pain_t0=rnorm(100, 5,2)
pain_t1=rnorm(100,4.5,2)
pain_t2=rnorm(100,3,2)

pain.rest_t0=rnorm(100,3,1)
pain.rest_t1=rnorm(100,2,1)
pain.rest_t2=rnorm(100,1,0.4)

data<-data.frame(id, gender, pain_t0, pain_t1, pain_t2, pain.rest_t0, pain.rest_t1, pain.rest_t2)
names(data)
## [1] "id"           "gender"       "pain_t0"      "pain_t1"      "pain_t2"     
## [6] "pain.rest_t0" "pain.rest_t1" "pain.rest_t2"

Wir möchten nun alle _t suchen und mit .t ersetzen.

names(data) <- str_replace(names(data), "_t",".t")
names(data)
## [1] "id"           "gender"       "pain.t0"      "pain.t1"      "pain.t2"     
## [6] "pain.rest.t0" "pain.rest.t1" "pain.rest.t2"

Oder wir möchten pain mit Schmerz ersetzen.

names(data) <- str_replace(names(data), "pain","Schmerz")
names(data)
## [1] "id"              "gender"          "Schmerz.t0"      "Schmerz.t1"     
## [5] "Schmerz.t2"      "Schmerz.rest.t0" "Schmerz.rest.t1" "Schmerz.rest.t2"

Nun möchten wir doch wieder die Punkte vor dem t als _, dazu müssen wir den . aber mit \ kennzeichnen, sonst würde der . für alle Zeichen stehen siehe dazu das stringr Cheat Sheet.

names(data) <- str_replace(names(data), "(\\.t)","_t")
names(data)
## [1] "id"              "gender"          "Schmerz_t0"      "Schmerz_t1"     
## [5] "Schmerz_t2"      "Schmerz.rest_t0" "Schmerz.rest_t1" "Schmerz.rest_t2"

56.2 Gross- und Kleinschreibung

Wir können die Gross- und Kleinschreibung mit dem clean_names Befehl des Janitor Pakets ändern.

names(data)
## [1] "id"              "gender"          "Schmerz_t0"      "Schmerz_t1"     
## [5] "Schmerz_t2"      "Schmerz.rest_t0" "Schmerz.rest_t1" "Schmerz.rest_t2"
data2<-janitor::clean_names(data, case="lower_camel")
names(data2)
## [1] "id"            "gender"        "schmerzT0"     "schmerzT1"    
## [5] "schmerzT2"     "schmerzRestT0" "schmerzRestT1" "schmerzRestT2"
data3<-janitor::clean_names(data, case="big_camel")
names(data3)
## [1] "Id"            "Gender"        "SchmerzT0"     "SchmerzT1"    
## [5] "SchmerzT2"     "SchmerzRestT0" "SchmerzRestT1" "SchmerzRestT2"
data4<-janitor::clean_names(data, case="sentence")
names(data4)
## [1] "Id"              "Gender"          "Schmerz t0"      "Schmerz t1"     
## [5] "Schmerz t2"      "Schmerz rest t0" "Schmerz rest t1" "Schmerz rest t2"
data5<-janitor::clean_names(data, case="title")
names(data5)
## [1] "Id"              "Gender"          "Schmerz t0"      "Schmerz t1"     
## [5] "Schmerz t2"      "Schmerz Rest t0" "Schmerz Rest t1" "Schmerz Rest t2"

Bei den letzten beiden Versionen sind wir jedoch nicht so zufrieden, da müssen wir etwas nachbessern.

data4<-clean_names(data4, case='none')
names(data4)
## [1] "Id"              "Gender"          "Schmerz_t0"      "Schmerz_t1"     
## [5] "Schmerz_t2"      "Schmerz_rest_t0" "Schmerz_rest_t1" "Schmerz_rest_t2"
data5<-clean_names(data4, case='none')
names(data5)
## [1] "Id"              "Gender"          "Schmerz_t0"      "Schmerz_t1"     
## [5] "Schmerz_t2"      "Schmerz_rest_t0" "Schmerz_rest_t1" "Schmerz_rest_t2"