GNU R: Daten in R

Aus Wikibooks


Daten in R können in Form verschiedener Objekte auftreten und auf vielfältige Weise manipuliert werden. Sie können direkt eingegeben oder über eine Textdatei oder Datenbank eingelesen und ausgegeben werden.

Variablen[Bearbeiten]

Variablen dienen in R, wie in anderen Programmiersprachen, der Speicherung von Daten. Dies können sowohl einfache Datentypen sein oder auch komplexe Datentypen wie Vektoren. Variablen bestehen aus einem Namen und einem Wert.

Bezeichnungskonventionen für Variablen[Bearbeiten]

  • Variablen beginnen mit einem Buchstaben und sollten keine Umlaute und Sonderzeichen enthalten, mit Ausnahme des Unterstrichsymbols _.
  • ein Variablennamen kann neben dem Unterstrichsymbols _ auch Zahlen enthalten, also z.B. alter1 oder alter_1.
  • Der Name darf nicht mit einer Zahl beginnen. Variablennamen wie 3r sind in R nicht erlaubt.

Diese Bezeichnungskonventionen in R gelten analog in vielen anderen Programmiersprachen (z.B. Javascript).

Wertzuweisung an Variablen[Bearbeiten]

Der Wert einer Variable kann in R auf zwei Weisen zugewiesen werden:

  • mit dem Gleicheitszeichen "=" und
  • mit dem Pfeiloperator "->"
> x=10
> y<-20

Beide Zuweisungsmöglichkeiten führen intern zu einem analogen Resultat. Die Ausgabe der Variableninhalte x und y zeigt, dass beide Zuweisung zu x und y erfolgreich die Werte 10 und 20 zugewiesen haben. > x [1] 10 > y [1] 20 >

Der ersten Variable mit dem Namen x wurde der Wert 10 zugewiesen, mittels = Zeichen, der Wert von y wurde mittels <- zugewiesen. Beide Weisen bedeuten das gleiche. Anschließend wurden die Werte ausgegeben. Dazu muss man einfach den Variablennamen eintippen. Im Gegensatz zu vielen anderen Programmiersprachen wird der Typ einer Variable nicht explizit definiert.

Groß- und Kleinschreibung[Bearbeiten]

R unterscheidet zwischen Groß- und Kleinschreibung bei den Variablennamen. Die Variable x sei wie oben bereits mit dem Wert 10 belegt. Wenn man nun versucht, den Wert von X (als Großbuchstaben) auszugeben, meldet R. dass diese Objekt nicht gefunden wurde, während von x (als Kleinbuchstaben) den vorher definierten Wert 10 erhält.

> X
Fehler: Objekt 'X' nicht gefunden
> x
[1] 10


Variableninhalte ausgeben[Bearbeiten]

Durch die einfache Eingabe eines Variablennamens in die R-Konsole wird der Inhalt der Variable ausgegeben. Dies gilt auch für Vektoren oder Matrizen.

> z
 [1] 5.0 3.0 4.0 8.0 6.0 2.5 0.0 1.3

Variablen anzeigen und Variablen löschen[Bearbeiten]

Der Befehl ls() listet alle Variablen auf, die sich in der aktuellen Worksession befinden. Genauso einfach kann man auch Variablen löschen. Dies geschieht durch den Befehl rm() und die Angabe des Variablennamen in der Klammer.

> ls()
[1] "bigtable" "bt"       "fl"       "names"    "t100"     "tt"      
> rm(t100)
> ls()
[1] "bigtable" "bt"       "fl"       "names"    "tt"      
> 

In diesem Beispiel wurden zuerst alle Variablennamen aufgelistet und anschließend wurde die Variable t100 mittels rm gelöscht.

Variablen vergleichen[Bearbeiten]

Das Vergleichen von zwei Variablen ist vor allem in der Programmierung sehr wichtig.

> x==y
[1] FALSE
> y=10
> x==y
[1] TRUE

Beim Vergleich der beiden Variablen x und y werden deren Inhalte verglichen. Mittels == wird verglichen, ob der Wert beider Variablen gleich ist. Dieser Fakt klingt trivial, aber in einigen objekt-orientierten Programmiersprachen wie Java wird dies anders gehandhabt. Zu beachten ist, dass man ohne Fehlermeldung einen numerischen Wert mit einem String vergleichen kann. Dies ist eine Quelle für Fehler.

Variablen als Vektoren[Bearbeiten]

In der Regel arbeitet man in R nicht mit einzelnen Werten, sondern mit Liste von Datensätze. Ein einzelner Datensatz setzt sich dann aus mehreren Werten zusammen (z.B. Temperatur, pH-Wert, Sauerstoffgehalt), die dann bei der Datenerhebung die Temperatur, den pH-Wert und den Sauerstoffgehalt an einem Messzeitpunkt beschreibt. Wenn man die Erhebung im zeitlichen Verlauf (z.B. jeden Tag für 365 Tage) wiederholt entsteht eine Tabelle mit 3 Spalten und 365 Zeilen, wobei in der Regel eine weitere Zeile als 0-te Zeile ergänzt wird, die als Spaltenüberschrift (header) interpretiert wird.

Temperaturverlauf als Vektor[Bearbeiten]

In dem folgende Beispiel betrachtet man die erste Spalte für die Temperatur als Vektor mit 5 Messzeitpunkten, die einer Variablen gespeichert werden.

> temperatur <- c(11,12,15,9,10)
> temperatur
[1] 11 12 15  9 10

Vergleichsoperation für den Temperaturverlauf[Bearbeiten]

Verbindet man diese Variable mit eine Vergleichsoperation, dann erhält man einen Vektor mit den Boolschen Variablen für die Gültigkeit der Vergleichsoperation.

> temperatur > 10
[1]  TRUE  TRUE  TRUE FALSE FALSE

Die letzten beiden Werte erfüllen, die Bedingung (eine Temperatur von 10 zu überschreiten) nicht. Diese Vergleichsoperation für Vektoren kann man z.B. verwenden, festzustellen, wann Messwerte einen Grenzwert überschritten haben.

Einfache Datentypen (modes)[Bearbeiten]

Bei der Einführung der Variablen wurde nur kurz erwähnt, dass Variablen verschiedene Dinge beinhalten können. Welche Datentypen dies sein können, wird in diesem und den folgenden Abschnitten erläutert. Prinzipiell gibt es in R drei Datentypen, einfache Datentypen, komplexe Datentypen und speziellere Datentypen. Wir beginnen mit den einfachen Datentypen, die in den bisherigen Beispielen auch schon eingesetzt haben. Die wesentlichen einfachen Datentypen sind:

  • numeric für Zahlen (wobei zwischen integer und double unterschieden werden kann)
  • complex für komplexe Zahlen
  • logical für logische Werte
  • character für Zeichen
  • raw für Bytes
> 5
> 3i+2
> TRUE
> "abcde"
> as.raw(65)

Zusätzlich gibt es einige etwas speziellere Datentypen, die zunächst nicht weiter behandelt werden sollen

  • function für Funktionen
  • call für Funktionsaufrufe
  • expression für Ausdrücke

Mit der Funktion mode() lässt sich der Datentyp eines Objekts bestimmen. Der mode ist eine grundlegende Eigenschaft eines jeden Objekts. Eine weitere grundlegende Eigenschaft ist length(). Zusätzliche Eigenschaften können mit attributes() ermittelt werden.

Komplexe Datentypen: Klassen[Bearbeiten]

Aus einfachen Daten lassen sich verschiedene Arten von Datenstrukturen zusammensetzen. Dies sind

  • vector für Listen von Objekten gleichen Typs
  • list für beliebige Listen von Objekten (auch rekursiv)
  • factor für Vektoren zur Gruppierung von Objekten
  • matrix
  • array
  • data.frame
  • ...

Welche Datenstruktur ein Objekt besitzt, kann mit class() ermittelt werden. Klassen sind ein allgemeines Konzept von erweiterten Datentypen. Jedes Objekt besitzt eine Klasse, die mit einem einfachen Datentyp übereinstimmt oder zusätzlich festgelegt werden kann.

Klassen sind wichtig für so genannte generische Funktionen, die je abhängig von der Klasse eines übergebenen Objekts arbeiten. Beispielsweise gibt es die Klasse Date, mit der ein numerischer Wert als Datum interpretiert werden kann. Die Klasse eines Objekts lässt sich mit class() feststellen.

d <- as.Date("2005-01-01") # Umwandlung einer Zeichenkette in ein Date-Objekt
mode(d)
[1] "numeric"
class(d)
[1] "Date"

Zeichenketten[Bearbeiten]

Zeichen oder Zeichenketten werden mit einfachen oder doppelten Anführungszeichen geschrieben. Dabei werden die Daten als n-dimensionale Vektoren gespeichert. Mehrere dieser Vektoren können zu einer Matrix zusammengefügt werden. Die Vektoren können drei verschiedene Datentypen enthalten, numerische und logische Werte sowie Text. Des weiteren existieren Funktionen, mit welchen Datenreihen erzeugt werden können.

h <- 'Hallo'
w <- 'Welt!'
paste(h,w,sep=", ")
[1] "Hallo, Welt!"

In diesem Beispiel werden zwei Zeichenketten miteinander verknüpft und ein Separator zwischen den Zeichenketten eingefügt. Es werden also eigentlich drei Zeichenketten miteinander verknüpft. Für diese Zeichenkettenverknüpfung wird der Befehl paste benutzt.

Die Länge von Zeichenketten lässt sich mit dem Befehl nchar ermitteln.

> x=" ABC"
> nchar(x)
[1] 4

Die Zeichenkette x hat die Länge 4, das Leerzeichen vor dem ersten A wird mitgezählt.

Zeichenketten lassen sich mit Hilfe verschiedener Befehle wie split, grep und substr bearbeiten.

> substr(x,2,3)
[1] "AB"

Hier wird ein Substring aus x erzeugt. Der erste Parameter gibt den Start und der letzte das Ende des Substrings in der ursprünglichen Zeichenkette an. Die Nummerierung der Zeichen beginnt bei 1. In diesem Fall werden die Buchstaben AB ausgewählt. Wenn der Start- und der Endwert gleich sind, wird nur ein Buchstabe ausgewählt.

> substr(x,2,2)
[1] "A"

Vektoren[Bearbeiten]

Ein Vektor ist ein Datentyp in R, der eine Reihe anderer Datentypen wie z. B. numeric oder character enthält. Ein Vektor ist ein eindimensionales Array. Hier ein Beispiel aus der Genetik, ein Vektor mit SNPs von 150 Tieren.

> s1
  [1]  GG  GG  GG  GG  GG  AC  GG  AA  GG  AC  GG  AG  AG  AC  AG  AC  GG  GG  AC  GG  AA  GG  GG  AG  CC  AA  GG  AC  AA  GG  AG  AC  GG  GG  AG  GG
 [37]  GG  GG  AG  GG  AG  GG  AG  AC  AG  AG  GG  AG  GG  AA  GG  AG  AG  GG  AA  AC  AG  GG  AG  GG  AA  AC  GG  GG  AA  GG  GG  GG  AG  GG  AG  AG
 [73]  AA  AC  GG  AG  AG  AA  AG  AG  AG  AG  AA  AA  AG  AC  GG  GG  CC  AA  GG  GG  AC  CC  GG  AC  AG  AC  AC  GG  AG  GG  AC  AG  AA  AG  GG  CC
[109]  AG  GG  AG  AG  AG  AC  AG  AA  AC  AA  AC  AA  AG  AG  GG  GG  GG  AG  GG  GG  AG  GG  AG  GG  AG  AA  GG  GG  AA  AC  AG  AG  GG  AG  AG  AA
[145]  AA  GG  AG  AC  AA  GG

Auf die Elemente eines Vektors kann man wie folgt zugreifen:

> s1[1]
[1]  GG
Levels:  AA  AC  AG  CC  GG

Hier wurde ein einzelnes Element, das erste Element des Vektors, ausgewählt. Im Gegensatz zu den meisten anderen Programmiersprachen wird das erste Element eines Vektors in R nicht mit 0 sondern mit 1 angesprochen. Zusätzlich werden immer die Level bei Vektoren ausgegeben, die Faktoren enthalten.

> s1[3:15]
 [1]  GG  GG  GG  AC  GG  AA  GG  AC  GG  AG  AG  AC  AG
Levels:  AA  AC  AG  CC  GG

Durch die Angabe eines Bereichs können auch mehrere Elemente ausgewählt werden. In diesem Beispiel wurden die Elemente 3 bis 15 ausgewählt.

> class(s1)
[1] "factor"
> dim(s1)
NULL
> length(s1)
[1] 150

Mit class findet man heraus, um was für einen Vektor es sich handelt, hier ist es ein Vektor der Faktoren enthält. Der Befehl dim liefert überraschenderweise bei Vektoren null, die Länge eines Vektors lässt sich aber mittels length bestimmen, hier enthält der Vektor 150 Elemente.

> levels(s1)
[1] " AA" " AC" " AG" " CC" " GG"

Wenn man einen Vektor mit Faktoren hat, kann man mittels levels die unterschiedlichen Elemente extrahieren und in Kombination mit length die Anzahl der Elemente ermitteln.

length(levels(s1))
[1] 5

Wenn man herausfinden möchte wie oft die einzelnen Faktoren im Vektor vorkommen, kann man den Befehl table verwenden.

> table(s1)
s1
  AA  AC  AG  CC  GG 
  22  22  46   4  56 

Manuelle Dateneingabe[Bearbeiten]

Eine einfache Möglichkeit manueller Dateneingabe ist die Funktion c :

c(5,3,4,8,6,2.5,0,1.3)

liest die Zahlenfolge "5, 3, 4, 8, 6, 2.5, 0, 1.3" ein. Wichtig ist hierbei, dass als Dezimaltrennzeichen ein Punkt stehen muss.

Der eben genannte Aufruf erzeugt nur die Ausgabe

[1] 5.0 3.0 4.0 8.0 6.0 2.5 0.0 1.3 

Eingabe von logischen Werten:[Bearbeiten]

abc <- c(TRUE,FALSE,TRUE,FALSE,FALSE,T,F,T,T)

speichert die logischen Werte in abc. Statt TRUE und FALSE werden oft die Variablen T und F genutzt. Diese sind standardmäßig gesetzt, können aber vom Benutzer geändert werden, was eine Fehlerquelle darstellt.


Inhaltsverzeichnis[Bearbeiten]