10  Umgang mit Datensätzen

Mit der Funktion str() (für structure) erhalten wir eine erste Beschreibung des Datensatzes.

# Übersicht von "MeinDatenframe" 
str(MeinDatenframe)
## 'data.frame':    12 obs. of  4 variables:
##  $ geschlecht: Factor w/ 3 levels "d","m","w": 2 3 1 2 3 1 2 3 1 2 ...
##  $ spitzname : chr  "Hasi" "Ide" "Momsi" "Ryu" ...
##  $ hausnummer: int  1 2 3 4 5 6 7 8 9 10 ...
##  $ angemeldet: logi  TRUE TRUE FALSE TRUE FALSE FALSE ...

Das Datenframe MeinDatenframe enthält 12 Beobachtungen von 4 Variablen. Varibale geschlecht ist ein Faktor mit 3 Ausprägungen, usw.

In RStudio werden diese Informationen im Datenfenster angezeigt (Abbildung 10.1).

Abb. 10.1: str() im Datenfenster

Mit der Funktion head() können Sie sich einen weiteren Überblick über den Datensatz verschaffen. Die Funktion head() gibt die ersten 6 Zeilen des Datensatzes aus.

# zeige die ersten 6 Reihen von "MeinDatenframe"
head(MeinDatenframe)
##       geschlecht spitzname hausnummer angemeldet
## Eins           m      Hasi          1       TRUE
## Zwei           w       Ide          2       TRUE
## Drei           d     Momsi          3      FALSE
## Vier           m       Ryu          4       TRUE
## Fünf           w      Dave          5      FALSE
## Sechs          d      Zoid          6      FALSE

Möchten wir mehr als 6 Einträge sehen, können wir dies an head() übergeben:

# zeige die ersten 10 Reihen von "MeinDatenframe"
head(MeinDatenframe, 10)
##        geschlecht spitzname hausnummer angemeldet
## Eins            m      Hasi          1       TRUE
## Zwei            w       Ide          2       TRUE
## Drei            d     Momsi          3      FALSE
## Vier            m       Ryu          4       TRUE
## Fünf            w      Dave          5      FALSE
## Sechs           d      Zoid          6      FALSE
## Sieben          m       Adu          7      FALSE
## Acht            w       Efi          8       TRUE
## Neun            d       Ole          9       TRUE
## Zehn            m       Ray         10       TRUE

Im Gegensatz dazu zeigt tail() die letzten Reihen des Datenframes an.

# zeige die letzten 5 Reihen von "MeinDatenframe"
tail(MeinDatenframe, 5)
##       geschlecht spitzname hausnummer angemeldet
## Acht           w       Efi          8       TRUE
## Neun           d       Ole          9       TRUE
## Zehn           m       Ray         10       TRUE
## Elf            w       Sam         11      FALSE
## Zwölf          d       Emi         12       TRUE

10.1 Sortieren

Mit der Funktion sort() können Datenreihen auf- und absteigend sortiert werden. Standardmäßig wird aufsteigend sortiert

# sortiere "hausnummer" von "MeinDatenframe" 
# aufsteigend
sort(MeinDatenframe$hausnummer)
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12

Um absteigend zu sortieren, muss der Parameter decreasing auf TRUE gesetzt werden

# sortiere "spitzname" von "MeinDatenframe"
# absteigend
sort(MeinDatenframe$spitzname, decreasing=T)
##  [1] "Zoid"  "Sam"   "Ryu"   "Ray"   "Ole"   "Momsi" "Ide"   "Hasi"  "Emi"  
## [10] "Efi"   "Dave"  "Adu"

Mit der Funktion order() werden die Zeilenpositionen ausgegeben, an deren Stelle sich die von sort() sortierten Daten befinden.

# sortiere "spitznamen" von "MeinDatenframe" 
# aufsteigend, und zeige Positionen an 
order(MeinDatenframe$spitzname)
##  [1]  7  5  8 12  1  2  3  9 10  4 11  6

Das kann man nun verwenden, um den kompletten Datensatz in dieser Ordnung anzuzeigen. Wir können ja durch Anhängen von eckigen Klammern die gewünschten Zeilen und Spalten des Datenframes referenzieren. Also übergeben wir die Positionsreihenfolge von order() als Argument in die eckige Klammer.

# sortiere "spitznamen" von "MeinDatenframe" 
# aufsteigend, zeige ganzes Datenframe an
MeinDatenframe[ order(MeinDatenframe$spitzname), ]
##        geschlecht spitzname hausnummer angemeldet
## Sieben          m       Adu          7      FALSE
## Fünf            w      Dave          5      FALSE
## Acht            w       Efi          8       TRUE
## Zwölf           d       Emi         12       TRUE
## Eins            m      Hasi          1       TRUE
## Zwei            w       Ide          2       TRUE
## Drei            d     Momsi          3      FALSE
## Neun            d       Ole          9       TRUE
## Zehn            m       Ray         10       TRUE
## Vier            m       Ryu          4       TRUE
## Elf             w       Sam         11      FALSE
## Sechs           d      Zoid          6      FALSE

Oder andersherum

# sortiere "spitznamen" von "MeinDatenframe" 
# absteigend, zeige ganzes Datenframe an 
MeinDatenframe[order(MeinDatenframe$spitzname, decreasing=T), ]
##        geschlecht spitzname hausnummer angemeldet
## Sechs           d      Zoid          6      FALSE
## Elf             w       Sam         11      FALSE
## Vier            m       Ryu          4       TRUE
## Zehn            m       Ray         10       TRUE
## Neun            d       Ole          9       TRUE
## Drei            d     Momsi          3      FALSE
## Zwei            w       Ide          2       TRUE
## Eins            m      Hasi          1       TRUE
## Zwölf           d       Emi         12       TRUE
## Acht            w       Efi          8       TRUE
## Fünf            w      Dave          5      FALSE
## Sieben          m       Adu          7      FALSE

10.2 Teilgruppen erstellen

Mit der Funktion subset() können Teilgruppen aus einem Datenframe erstellt werden.

# erstelle eine Teilgruppe aus MeinDatenframe
# für "geschlecht" = d
subset(MeinDatenframe, geschlecht=="d")
##       geschlecht spitzname hausnummer angemeldet
## Drei           d     Momsi          3      FALSE
## Sechs          d      Zoid          6      FALSE
## Neun           d       Ole          9       TRUE
## Zwölf          d       Emi         12       TRUE

Über den Parameter select kann angegeben werden, welche Spalten übernommen werden sollen.

# erstelle eine Teilgruppe aus MeinDatenframe
# für "geschlecht" = d
# aber nur Spalte "spitzname" und "angemeldet"
subset(MeinDatenframe, geschlecht=="d", select = c(spitzname, angemeldet))
##       spitzname angemeldet
## Drei      Momsi      FALSE
## Sechs      Zoid      FALSE
## Neun        Ole       TRUE
## Zwölf       Emi       TRUE

Eine andere Möglichkeit zur Erstellung von Teilgruppen kann über die Referenzierung der Zeilen und Spalten des Datenframes (eckige Klammern) erfolgen

# erstelle eine Teilgruppe aus MeinDatenframe
# für "geschlecht" = w
MeinDatenframe[ MeinDatenframe$geschlecht == "w", ]
##      geschlecht spitzname hausnummer angemeldet
## Zwei          w       Ide          2       TRUE
## Fünf          w      Dave          5      FALSE
## Acht          w       Efi          8       TRUE
## Elf           w       Sam         11      FALSE

Auf diese Weise können die Bedingungen auch mit einem & kombiniert werden

# erstelle eine Teilgruppe aus MeinDatenframe 
# für "geschlecht" = w und "hausnummer" größer 5 
MeinDatenframe[(MeinDatenframe$geschlecht == "w") & (MeinDatenframe$hausnummer > 5) ,]
##      geschlecht spitzname hausnummer angemeldet
## Acht          w       Efi          8       TRUE
## Elf           w       Sam         11      FALSE

Über Angabe der Spaltennummern können wir das Teilset noch weiter zusammenschrumpfen lassen

# erstelle eine Teilgruppe aus MeinDatenframe 
# für "geschlecht" = w und "angemeldet" = TRUE 
# aber nur Spalte "spitzname" und "hausnummer"
MeinDatenframe[(MeinDatenframe$geschlecht == "w") & (MeinDatenframe$angemeldet== T), c(2,3)]
##      spitzname hausnummer
## Zwei       Ide          2
## Acht       Efi          8

Möchte man auf die Referenzierung per Dollarzeichen $ verzichten, kann die Funktion with() verwendet werden.

# with() macht es leichter 
with(MeinDatenframe, MeinDatenframe[(geschlecht == "w") & (angemeldet == T), c(2,3)])
##      spitzname hausnummer
## Zwei       Ide          2
## Acht       Efi          8