4 – Lösungen

Statistische Datenanalyse mit R

Autor

Clemens Brunner

Veröffentlicht

23. Oktober 2025

Übung 1

u = seq(98, 50, -2)
v = seq(0, 48, 2)
length(u)  # 25 Elemente -> 5 Zeilen bedingen 5 Spalten
[1] 25
length(v)  # 25 Elemente -> 5 Zeilen bedingen 5 Spalten
[1] 25
dim(u) = c(5, 5)
dim(v) = c(5, 5)
(r = cbind(u, v))
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]   98   88   78   68   58    0   10   20   30    40
[2,]   96   86   76   66   56    2   12   22   32    42
[3,]   94   84   74   64   54    4   14   24   34    44
[4,]   92   82   72   62   52    6   16   26   36    46
[5,]   90   80   70   60   50    8   18   28   38    48
class(r)  # matrix
[1] "matrix" "array" 

Übung 2

dim(r)  # 5 Zeilen, 10 Spalten
[1]  5 10
length(r)  # 50 Elemente
[1] 50
r[4, 6]  # 6
[1] 6
rowMeans(r)
[1] 49 49 49 49 49
colMeans(r)
 [1] 94 84 74 64 54  4 14 24 34 44
mean(r[3:5, 1:2])  # 87
[1] 87

Übung 3

df = data.frame(
    name=c(
        "Ben", "Emma", "Luis", "Mia", "Paul",
        "Hanna", "Lukas", "Sophia", "Jonas", "Emilia"
    ),
    gender=rep(c("m", "f"), 5),
    value=c(11, 76, 42, 8, 32, 96, 88, 65, 14, 50)
)
df
     name gender value
1     Ben      m    11
2    Emma      f    76
3    Luis      m    42
4     Mia      f     8
5    Paul      m    32
6   Hanna      f    96
7   Lukas      m    88
8  Sophia      f    65
9   Jonas      m    14
10 Emilia      f    50
str(df)  # character, character, numeric
'data.frame':   10 obs. of  3 variables:
 $ name  : chr  "Ben" "Emma" "Luis" "Mia" ...
 $ gender: chr  "m" "f" "m" "f" ...
 $ value : num  11 76 42 8 32 96 88 65 14 50

Übung 4

df_f = df[df[, "gender"] == "f", ]
df_f
     name gender value
2    Emma      f    76
4     Mia      f     8
6   Hanna      f    96
8  Sophia      f    65
10 Emilia      f    50
Hinweis

Zur Erstellung von df_f gibt es noch weitere Varianten:

df_f = df[df$gender == "f", ]
df_f = df[df[["gender"]] == "f",]
df_f = df[df[[2]] == "f",]
df_f = df[df[, 2] == "f",]

Fünf Möglichkeiten, um auf die erste Spalte zuzugreifen:

df_f[, 1]  # Spalte 1
[1] "Emma"   "Mia"    "Hanna"  "Sophia" "Emilia"
df_f[, "name"]  # Spalte "name"
[1] "Emma"   "Mia"    "Hanna"  "Sophia" "Emilia"
df_f$name  # Spalte "name"
[1] "Emma"   "Mia"    "Hanna"  "Sophia" "Emilia"
df_f[["name"]]  # Spalte "name"
[1] "Emma"   "Mia"    "Hanna"  "Sophia" "Emilia"
df_f[[1]]  # Spalte 1
[1] "Emma"   "Mia"    "Hanna"  "Sophia" "Emilia"

Übung 5

dim(mtcars)  # 32 Zeilen, 11 Spalten
[1] 32 11
mtcars1 = mtcars[mtcars$mpg > 25, ]
dim(mtcars1)  # 6 Zeilen, 11 Spalten
[1]  6 11

Übung 6

library(tibble)

air = as_tibble(airquality)
airquality[, 1]
  [1]  41  36  12  18  NA  28  23  19   8  NA   7  16  11  14  18  14  34   6  30  11   1  11   4  32  NA  NA  NA  23
 [29]  45 115  37  NA  NA  NA  NA  NA  NA  29  NA  71  39  NA  NA  23  NA  NA  21  37  20  12  13  NA  NA  NA  NA  NA
 [57]  NA  NA  NA  NA  NA 135  49  32  NA  64  40  77  97  97  85  NA  10  27  NA   7  48  35  61  79  63  16  NA  NA
 [85]  80 108  20  52  82  50  64  59  39   9  16  78  35  66 122  89 110  NA  NA  44  28  65  NA  22  59  23  31  44
[113]  21   9  NA  45 168  73  NA  76 118  84  85  96  78  73  91  47  32  20  23  21  24  44  21  28   9  13  46  18
[141]  13  24  16  13  23  36   7  14  30  NA  14  18  20
air[, 1]
# A tibble: 153 × 1
   Ozone
   <int>
 1    41
 2    36
 3    12
 4    18
 5    NA
 6    28
 7    23
 8    19
 9     8
10    NA
# ℹ 143 more rows
airquality[, "Ozone"]
  [1]  41  36  12  18  NA  28  23  19   8  NA   7  16  11  14  18  14  34   6  30  11   1  11   4  32  NA  NA  NA  23
 [29]  45 115  37  NA  NA  NA  NA  NA  NA  29  NA  71  39  NA  NA  23  NA  NA  21  37  20  12  13  NA  NA  NA  NA  NA
 [57]  NA  NA  NA  NA  NA 135  49  32  NA  64  40  77  97  97  85  NA  10  27  NA   7  48  35  61  79  63  16  NA  NA
 [85]  80 108  20  52  82  50  64  59  39   9  16  78  35  66 122  89 110  NA  NA  44  28  65  NA  22  59  23  31  44
[113]  21   9  NA  45 168  73  NA  76 118  84  85  96  78  73  91  47  32  20  23  21  24  44  21  28   9  13  46  18
[141]  13  24  16  13  23  36   7  14  30  NA  14  18  20
air[, "Ozone"]
# A tibble: 153 × 1
   Ozone
   <int>
 1    41
 2    36
 3    12
 4    18
 5    NA
 6    28
 7    23
 8    19
 9     8
10    NA
# ℹ 143 more rows

Beim Indizieren einer Spalte mit eckigen Klammern erhält man bei einem Data Frame einen Vektor, bei einem Tibble erhält man jedoch ein Tibble.

airquality$Ozone
  [1]  41  36  12  18  NA  28  23  19   8  NA   7  16  11  14  18  14  34   6  30  11   1  11   4  32  NA  NA  NA  23
 [29]  45 115  37  NA  NA  NA  NA  NA  NA  29  NA  71  39  NA  NA  23  NA  NA  21  37  20  12  13  NA  NA  NA  NA  NA
 [57]  NA  NA  NA  NA  NA 135  49  32  NA  64  40  77  97  97  85  NA  10  27  NA   7  48  35  61  79  63  16  NA  NA
 [85]  80 108  20  52  82  50  64  59  39   9  16  78  35  66 122  89 110  NA  NA  44  28  65  NA  22  59  23  31  44
[113]  21   9  NA  45 168  73  NA  76 118  84  85  96  78  73  91  47  32  20  23  21  24  44  21  28   9  13  46  18
[141]  13  24  16  13  23  36   7  14  30  NA  14  18  20
air$Ozone
  [1]  41  36  12  18  NA  28  23  19   8  NA   7  16  11  14  18  14  34   6  30  11   1  11   4  32  NA  NA  NA  23
 [29]  45 115  37  NA  NA  NA  NA  NA  NA  29  NA  71  39  NA  NA  23  NA  NA  21  37  20  12  13  NA  NA  NA  NA  NA
 [57]  NA  NA  NA  NA  NA 135  49  32  NA  64  40  77  97  97  85  NA  10  27  NA   7  48  35  61  79  63  16  NA  NA
 [85]  80 108  20  52  82  50  64  59  39   9  16  78  35  66 122  89 110  NA  NA  44  28  65  NA  22  59  23  31  44
[113]  21   9  NA  45 168  73  NA  76 118  84  85  96  78  73  91  47  32  20  23  21  24  44  21  28   9  13  46  18
[141]  13  24  16  13  23  36   7  14  30  NA  14  18  20
airquality[["Ozone"]]
  [1]  41  36  12  18  NA  28  23  19   8  NA   7  16  11  14  18  14  34   6  30  11   1  11   4  32  NA  NA  NA  23
 [29]  45 115  37  NA  NA  NA  NA  NA  NA  29  NA  71  39  NA  NA  23  NA  NA  21  37  20  12  13  NA  NA  NA  NA  NA
 [57]  NA  NA  NA  NA  NA 135  49  32  NA  64  40  77  97  97  85  NA  10  27  NA   7  48  35  61  79  63  16  NA  NA
 [85]  80 108  20  52  82  50  64  59  39   9  16  78  35  66 122  89 110  NA  NA  44  28  65  NA  22  59  23  31  44
[113]  21   9  NA  45 168  73  NA  76 118  84  85  96  78  73  91  47  32  20  23  21  24  44  21  28   9  13  46  18
[141]  13  24  16  13  23  36   7  14  30  NA  14  18  20
air[["Ozone"]]
  [1]  41  36  12  18  NA  28  23  19   8  NA   7  16  11  14  18  14  34   6  30  11   1  11   4  32  NA  NA  NA  23
 [29]  45 115  37  NA  NA  NA  NA  NA  NA  29  NA  71  39  NA  NA  23  NA  NA  21  37  20  12  13  NA  NA  NA  NA  NA
 [57]  NA  NA  NA  NA  NA 135  49  32  NA  64  40  77  97  97  85  NA  10  27  NA   7  48  35  61  79  63  16  NA  NA
 [85]  80 108  20  52  82  50  64  59  39   9  16  78  35  66 122  89 110  NA  NA  44  28  65  NA  22  59  23  31  44
[113]  21   9  NA  45 168  73  NA  76 118  84  85  96  78  73  91  47  32  20  23  21  24  44  21  28   9  13  46  18
[141]  13  24  16  13  23  36   7  14  30  NA  14  18  20

Bei diesen Varianten erhält man die Daten in der Spalte immer als Vektor.

Tibbles sind beim Indizieren mit eckigen Klammern konsistenter, weil das Ergebnis immer ein Tibble ist. Bei Data Frames ist das Ergebnis manchmal ein Vektor (wie in den obigen Beispielen), manchmal aber auch ein Data Frame (z.B. wenn man zwei Spalten herausgreift):

airquality[, 1:2]
    Ozone Solar.R
1      41     190
2      36     118
3      12     149
4      18     313
5      NA      NA
6      28      NA
7      23     299
8      19      99
9       8      19
10     NA     194
11      7      NA
12     16     256
13     11     290
14     14     274
15     18      65
16     14     334
17     34     307
18      6      78
19     30     322
20     11      44
21      1       8
22     11     320
23      4      25
24     32      92
25     NA      66
26     NA     266
27     NA      NA
28     23      13
29     45     252
30    115     223
31     37     279
32     NA     286
33     NA     287
34     NA     242
35     NA     186
36     NA     220
37     NA     264
38     29     127
39     NA     273
40     71     291
41     39     323
42     NA     259
43     NA     250
44     23     148
45     NA     332
46     NA     322
47     21     191
48     37     284
49     20      37
50     12     120
51     13     137
52     NA     150
53     NA      59
54     NA      91
55     NA     250
56     NA     135
57     NA     127
58     NA      47
59     NA      98
60     NA      31
61     NA     138
62    135     269
63     49     248
64     32     236
65     NA     101
66     64     175
67     40     314
68     77     276
69     97     267
70     97     272
71     85     175
72     NA     139
73     10     264
74     27     175
75     NA     291
76      7      48
77     48     260
78     35     274
79     61     285
80     79     187
81     63     220
82     16       7
83     NA     258
84     NA     295
85     80     294
86    108     223
87     20      81
88     52      82
89     82     213
90     50     275
91     64     253
92     59     254
93     39      83
94      9      24
95     16      77
96     78      NA
97     35      NA
98     66      NA
99    122     255
100    89     229
101   110     207
102    NA     222
103    NA     137
104    44     192
105    28     273
106    65     157
107    NA      64
108    22      71
109    59      51
110    23     115
111    31     244
112    44     190
113    21     259
114     9      36
115    NA     255
116    45     212
117   168     238
118    73     215
119    NA     153
120    76     203
121   118     225
122    84     237
123    85     188
124    96     167
125    78     197
126    73     183
127    91     189
128    47      95
129    32      92
130    20     252
131    23     220
132    21     230
133    24     259
134    44     236
135    21     259
136    28     238
137     9      24
138    13     112
139    46     237
140    18     224
141    13      27
142    24     238
143    16     201
144    13     238
145    23      14
146    36     139
147     7      49
148    14      20
149    30     193
150    NA     145
151    14     191
152    18     131
153    20     223
air[, 1:2]
# A tibble: 153 × 2
   Ozone Solar.R
   <int>   <int>
 1    41     190
 2    36     118
 3    12     149
 4    18     313
 5    NA      NA
 6    28      NA
 7    23     299
 8    19      99
 9     8      19
10    NA     194
# ℹ 143 more rows

Möchte man für eine einzige Spalte einen Vektor, kann man bei beiden Datentypen entweder $ oder [[]] verwenden (letzteres ist zu empfehlen).