3.6 Selektion von Spalten/Zeilen in dataframes

Man kann auf einen einzelnen Vektor des mtcars dataframes zugreifen, indem man den Namen des Datensatzes mit dem $ und weiterhin mit dem Spaltennamen verknüpft:

# Zeige mit die Pferdestärken (hp) der Fahrzeuge an
mtcars$hp
##  [1] 110 110  93 110 175 105 245  62  95 123 123 180 180 180 205 215 230  66  52
## [20]  65  97 150 150 245 175  66  91 113 264 175 335 109

Das Ergebnis ist ein Vektor, mit dem wir die bekannten Vektorfunktionen anwenden können. Die eckige Zahl zu Beginn der Zeile steht dabei für das ite Element des Vektors. Die Zahl 110 steht also auf der Position (dem Index) [1] und die Zahl 245 and Position [24]. Die Darstellung erleichert es einen Überblick über die Anzahl an Elementen zu bekommen.

mean(mtcars$hp)
## [1] 146.6875

Die Autos haben im Mittel also 146 PS, bereits 1974 😎

Auch mit [] kann auf Vektoren in einem dataframe zugegriffen werden. Der Spaltenname muss hierbei jedoch in "" gesetzt werden.

head(mtcars["hp"], 5)
##                    hp
## Mazda RX4         110
## Mazda RX4 Wag     110
## Datsun 710         93
## Hornet 4 Drive    110
## Hornet Sportabout 175

Wenn wir die Position der Spalte hp kennen genügt aber auch die Zahl

head(mtcars[4], 5)
##                    hp
## Mazda RX4         110
## Mazda RX4 Wag     110
## Datsun 710         93
## Hornet 4 Drive    110
## Hornet Sportabout 175

Last but not least, eine letzte Möglichkeit Daten zu spezifizieren ist durch das Setzen eines Kommas:

# Wähle die ersten zwei Zeilen aus aber ALLE Spalten
head(mtcars[1:2, ], 5)
##               mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4      21   6  160 110  3.9 2.620 16.46  0  1    4    4
## Mazda RX4 Wag  21   6  160 110  3.9 2.875 17.02  0  1    4    4
# Wähle die ersten zwei Spalten aus aber ALLE Zeilen
head(mtcars[ ,1:2], 5)
##                    mpg cyl
## Mazda RX4         21.0   6
## Mazda RX4 Wag     21.0   6
## Datsun 710        22.8   4
## Hornet 4 Drive    21.4   6
## Hornet Sportabout 18.7   8

Der Abschnitt vor dem , bezieht sich also auf die Zeilen und danach auf die Spalten.

Mit subset() kann man noch spezifischer auf den Inhalt eines dataframes zugreifen und auch mit logischen Operatoren arbeiten. Es ist eine der wichtigsten Funktionen um auf Daten zurückzugreifen.

Argument Beschreibung
x Name des dataframes
subset Ein logischer Vektor der Werte die man behalten möchte
select Die Spalten die man behalten möchte
# Wähle nur Autos mit mehr als 5 Zylinder aus
head(subset(mtcars,
       subset = cyl > 5), 5)
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
# Wähle nur Autos mit mehr als 5 Zylinder & > 100 PS aus
head(subset(mtcars,
       subset = cyl > 5 &
                hp > 100), 5) 
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
# Wähle nur Autos mit mehr als 5 Zylinder & > 100 PS aus & dabei weniger als 15 Meilen pro Gallone fahren
head(subset(mtcars,
       subset = cyl > 5 &
                hp > 100 &
                mpg < 15), n = 5)
##                      mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Duster 360          14.3   8  360 245 3.21 3.570 15.84  0  0    3    4
## Cadillac Fleetwood  10.4   8  472 205 2.93 5.250 17.98  0  0    3    4
## Lincoln Continental 10.4   8  460 215 3.00 5.424 17.82  0  0    3    4
## Chrysler Imperial   14.7   8  440 230 3.23 5.345 17.42  0  0    3    4
## Camaro Z28          13.3   8  350 245 3.73 3.840 15.41  0  0    3    4

Wenn ihr also mit richtigen (unter heutigen Gesichtspunkten) Drecksschleudern rumfahren wollt, dann habt ihr durch logisches Filtern eine gute Auswahl getroffen. Diese fünf Autos erfüllen unsere drei gesetzten Kriterien.

Hier findet ihr eine Auflistung der logischen Operatoren in R:

Logischer Operator Bedeutung
== Gleich
!= Nicht gleich
< Kleiner als
<= Kleiner als oder gleich
> Größer als
>= Größer als oder gleich
| Oder
! Nicht
%in% Durchsuche in

Mit der Hilfe von & (UND), | (ODER), %in% (VIELE ODER ARGUMENTE) können Abfragen wie > oder < ergänzt werden.