Zum Inhalt springen

GNU R: Daten selektieren

Aus Wikibooks

Daten auswählen

[Bearbeiten]

Sehr oft möchte man nicht alle Daten aus einer eingelesenen Datei verarbeiten, sondern nur Teile davon. Hier bietet R elegante Lösungen basierend auf Rs sehr flexiblen Parameterverarbeitung.

Inhaltsverzeichnis

[Bearbeiten]


Extrahieren von Spalten aus einer Tabelle

[Bearbeiten]

Problem 1

[Bearbeiten]

Ich habe ein Tabelle und möchte nun diese Tabelle reduzieren. Es sollen nur die Spalten ausgewählt werden, die mit den Buchstaben "Row" anfangen.

Lösung 1

[Bearbeiten]

Wir verwenden als Beispiel mit eine kleine Tabelle, um das Prinzip der Selection deutlich zu machen (siehe CSV-Beispieldatei data.csv[1]):

Datentabelle: studentdata
name aufgabe1 aufgabe2 aufgabe3 punkte
Anna 10 15 13 38
Bert 3.5 13 0 16.5
Camilla 12 8 15 35
Dieter 5 6 7 18
Emilia 15 15 14.5 44.5
Friedrich 11 12 4 27

Mit dem dim kann man die Dimension der Tabelle (dataframe) überprüfen.

> dim(studentdata)
[1]   6 5

Die Originaltabelle mit 6 Zeilen und 5 Spalten. Nun wollen wir die Spalten extrahieren, die mit dem Prefix "aufgabe" beginnen.

  log4aufgaben <- grepl("aufgabe", colnames(studentdata))

Mit dem logischen grep-Befehl grepl erhält man eine Vektor mit boolschen Variable "TRUE" bzw. "FALSE", wobei der Wahrheitswert angibt, ob der Spaltennamen mit "aufgabe beginnt.

Datentabelle: studentdata
name aufgabe1 aufgabe2 aufgabe3 punkte
FALSE TRUE TRUE TRUE FALSE

Mit dem normalen grep-Befehl (ohne "l" am Ende) erhält man die Spaltenindizes, die mit "aufgabe" beginnen.

  index4aufgaben <- grep("aufgabe", colnames(studentdata))

Als Resultat erhält man einen Vektor mit 3 Einträgen

Vektor: index4aufgaben
2 3 4

Wenn man nun die Anzahl der Aufgaben in einer Tabelle bestimmen möchte, muss man nur die Länge des Indexvektors "index4aufgaben" berechnen

aufgabenanzahl <- length(index4aufgaben)

Nun extrahieren wir alle Spalten, die die Punkte für einzelne Aufgaben enthält.

nur_aufgaben <- studentdata[ , index4aufgaben]

Die Tabelle nur_aufgaben enthält nur die Spalten mit Aufgabenpunkten und reduziert damit Ausgangstabelle auf die mit "grep" gefundenen Indizes.

Datentabelle: nur_aufgaben
aufgabe1 aufgabe2 aufgabe3
10 15 13
3.5 13 0
12 8 15
5 6 7
15 15 14.5
11 12 4

Wenn wir nun die Dimension des resultierenden Dataframes/Tabelle untersuchen, erhält man 6 Zeilen und 3 Spalten.

> dim(nur_aufgabe)
[1]   6 3

Extrahieren von Spalten mit Spaltennamen

[Bearbeiten]

Problem 2

[Bearbeiten]

Gegeben ist ein Tabelle (Dataframe) mit bekannten Spaltenüberschriften (column names) und möchte nun aus dieser Tabelle einzelne Spalten, die in einem speziellen Anwendungsfall von Interesse sind, zu einer neuen Tabelle zusammenzufassen.

CSV-Datei - Dataframe 2

[Bearbeiten]
  name , aufgabe1 , aufgabe2 , aufgabe3 , summe
  Anna , 10 , 15, 13 , 38
  Bert , 3.5 , 13, 0 , 16.5
  Camilla , 12 , 8 , 15 , 35
  Dieter , 5 , 6 , 7 , 18 
  Emilia 15 , 15 , 14.5 , 44.5

Die obige Datei wird in einen Dataframe geladen:

 studentdata <- read.csv("klausur.csv", header=TRUE, stringsAsFactors=FALSE)

Lösung 2

[Bearbeiten]

Man erstellt zunächst eine neue Tabelle in dem nur der Name der Person und die erreichte Punktzahl in der Klausur enthalten ist.

name  <- studentdata$name
summe <- studentdata$summe
klausur_ergebnis <- data.frame(name,summe)

Die erzeugte Tabelle hat zwei Spalten mit dem Namen "name" und "summe". Wenn man diesen Dataframe wieder in eine CSV-Datei speichert, erhält man folgende CSV-Datei mit dem Namen "klausurergebnis.csv" mit folgenden Befehl.

  write.csv(studentdata, "datasumme.csv", row.names = FALSE)

Die Tabelle hat dann die folgenden Spaltenstruktur.

  "name"    , "summe"
  "Anna"    , 38
  "Bert"    , 16.5
  "Camilla" , 35
  "Dieter"  , 18 
  "Emilia"  , 44.5

Quellennachweis

[Bearbeiten]
  1. Bert Niehaus (2023) data.csv GitHub-Repository KnitR for Education https://github.com/niebert/knitr4education für eine Wikiversity-Lernressource - Datei: data.csv