Yet another R blog

Packages • Praxis • Plots

Monat: September 2016

Bevölkerungspyramiden plotten

Nur wenige Länder haben eine Altersverteilung in Pyramidenform

Bevölkerungspyramiden zeigen die Altersverteilung einer Population. Grafisch betrachtet handelt es sich dabei um zwei vertikale Barplots. Die entsprechenden Daten für sämtliche Länder der Erde lassen sich online von der Seite www.census.gov abrufen und direkt im Skript verwerten. Weiterlesen

Zeitreihen mit ggfortify

Mit ggfortify lassen sich viele R-Datentypen plotten

Eine Art Quasi-Standard für das Plotten mit R ist ggplot2. Es benötigt aber als Datenquelle einen Data Frame. Manchmal liegen die Daten aber in einem anderen Format vor, etwa Time Series oder xts. Hier hilft ggfortify, das eine ganze Latte Formate plotten kann. Es basiert auf ggplot2, so dass sich der Plot mit ggplot2-Syntax modifizieren lässt. Weiterlesen

Installierte R-Packages auflisten

So behälst du den Überblick, welche Packages unter R installiert sind

Wer regelmäßig mit R arbeitet, installiert im Laufe der Zeit unzählige Packages. Um zu ermitteln, welche Packages in welcher Version derzeit installiert sind, dient der folgende Zweizeiler:

packinfo <- installed.packages()
packinfo[,c("Package", "Version")]

Um sich hingegen anzeigen zulassen, welche Packages von dem aktuellen Benutzer installiert worden sind, verwendet man

ip <- as.data.frame(installed.packages()[,c(1,3:4)])
rownames(ip) <- NULL
ip <- ip[is.na(ip$Priority),1:2,drop=FALSE]
print(ip, row.names=FALSE)

Installierte Packages samt Versionsnummern
Eine Liste sämtlicher verfügbarer R-Packages findet sich auf der Seite https://cran.r-project.org/. Es sind mittlerweile über 9000.

Zeichen in Strings entfernen

Sonderzeichen in Strings ändern oder entfernen

Häufig enthalten Strings in Data Frames unerwünschte Zeichen wie etwa das Euro-Zeichen €. Um dieses zu entfernen, bieten sich die R-Funktionen sub() und gsub() an. In der Klammer steht erst das oder die zu ersetzenden Zeichen, dann das neue Zeichen und schließlich der Vektor, der duchsucht werden soll. Letzteres kann auch eine Spalte in einem Data Frame sein.

value <- sub("\u20AC", "", x) # € entfernen

Dabei ersetzt sub() nur das als erstes vorkommende Zeichen, während gsub() alle ersetzt.

Factor in numeric umwandeln

So lässt sich ein factor in den Typ numeric ändern

R bietet keinen Befehl, um etwa in einem Data Frame eine Spalte mit Faktoren – Typ factor – in nummerische Werte (Typ numeric) umzuwandeln. Stattdessen ist der Umweg über character nötig. Um eine einzelne Spalte zu konvertieren, genügt der Befehl
df$x <- as.numeric(as.character(df$x))
Wenn mehrere Spalten betroffen sind, verwendet man

indx <- sapply(df, is.factor)
df[indx] <- lapply(df[indx], 
    function(x) as.numeric(as.character(x)))

Magische Quadrate mit R

Einfach magisch

Magische Quadrate der Kantenlänge n haben eine quadratische Anordnung der Zahlen 1 bis n sodass die Summe der Zahlen in allen Zeilen, Spalten und Diagonalen gleich ist. Diese Summe bezeichnet man auch als magische Zahl.

Ein solches magisches Quadrat etwa mit der Kantenlänge 10 von Hand zu erstellen, ist nicht trivial (siehe auch Wikipedia-Artikel). In der R-Package matlab ist eine Funktion enthalten, die magische Quadrate mit einer beliebigen Kantenlänge erstellt. Nach der Installation von matlab mittels install.packages("matlab") erzeugt

library(matlab)
(magie <- magic(10))

ein magisches Quadrat der Kantenlänge 10. Die magische Zahl lässt sich dann mit rowSums(magie) anzeigen. In diesem Beispiel ist es die Zahl 505.

    92   99    1    8   15   67   74   51   58    40
    98   80    7   14   16   73   55   57   64    41
     4   81   88   20   22   54   56   63   70    47
    85   87   19   21    3   60   62   69   71    28
    86   93   25    2    9   61   68   75   52    34
    17   24   76   83   90   42   49   26   33    65
    23    5   82   89   91   48   30   32   39    66
    79    6   13   95   97   29   31   38   45    72
    10   12   94   96   78   35   37   44   46    53
    11   18  100   77   84   36   43   50   27    59