Intro
Importiert man Postleitzahlen aus anderen Datenformaten (z.B. Excel, Access) in R, ist es nicht selten, dass Postleitzahlen programmintern tatsächlich auch als Zahlen abgespeichert werden. Wie ein Blick auf einen im Internet frei verfügbaren Datensatz zeigt, kann dies zu folgendem Problem führen:
library(dplyr)
library(readxl)
mydata <- readxl::read_xlsx("Liste-der-PLZ-in-Excel-Karte-Deutschland-Postleitzahlen.xlsx")
head(mydata)
## # A tibble: 6 x 4 ## PLZ Bundesland Kreis Typ ## <dbl> <chr> <chr> <chr> ## 1 1067 Sachsen Dresden Stadt ## 2 1069 Sachsen Dresden Stadt ## 3 1097 Sachsen Dresden Stadt ## 4 1099 Sachsen Dresden Stadt ## 5 1108 Sachsen Dresden Stadt ## 6 1109 Sachsen Dresden Stadt
Die Postleitzahlen der Städte und Gemeinden in den Bundesländern Sachsen, Sachsen-Anhalt und Thüringen werden der führenden Null beraubt und als vierstellige Zahlen dargestellt.
Um den entsprechenden PLZ die führende Null zurückzugeben, habe ich die Funktion plz_repair()
geschrieben.
plz_repair <- function(x){
x = ifelse(nchar(x) == 4, paste0('0', x), as.character(x))
}
Die Funktion prüft zunächst, ob die PLZ vierstellig ist. Wenn diese Bedingung erfüllt ist, wird die PLZ um eine führende Null erweitert, sodass eine fünfstellige PLZ entsteht. Bereits fünfstellige PLZ bleiben unverändert. Die reparierte PLZ-Variable wird als character string abgespeichert.
mydata <- mydata %>%
mutate(PLZ = plz_repair(PLZ))
head(mydata)
## # A tibble: 6 x 4 ## PLZ Bundesland Kreis Typ ## <chr> <chr> <chr> <chr> ## 1 01067 Sachsen Dresden Stadt ## 2 01069 Sachsen Dresden Stadt ## 3 01097 Sachsen Dresden Stadt ## 4 01099 Sachsen Dresden Stadt ## 5 01108 Sachsen Dresden Stadt ## 6 01109 Sachsen Dresden Stadt
tail(mydata)
## # A tibble: 6 x 4 ## PLZ Bundesland Kreis Typ ## <chr> <chr> <chr> <chr> ## 1 99986 Thüringen Unstrut-Hainich-Kreis Kreis ## 2 99988 Thüringen Unstrut-Hainich-Kreis Kreis ## 3 99991 Thüringen Unstrut-Hainich-Kreis Kreis ## 4 99994 Thüringen Unstrut-Hainich-Kreis Kreis ## 5 99996 Thüringen Unstrut-Hainich-Kreis Kreis ## 6 99998 Thüringen Unstrut-Hainich-Kreis Kreis
Danke, gefällt mir gut! “Neues” R-Sprech …
Plus: tidyverse (readxl, dplyr)
Plus: funktionales Programmieren
Plus: Piping mit %>%
While I’d prefer fixing it at the load step, sprintf(“%05d”, 1234) also does the trick.