5  Wertesequenzen erzeugen

Bislang haben wir unsere Daten von Hand eingeben. Für die Zahlenreihe von 1 bis 10 sah das so aus:

# Zahlenreihe von 1 bis 10 
zahlen <- c(1, 2, 3, 4, 5, 6, 7, 8, 9 ,10)
# ausgeben 
zahlen
##  [1]  1  2  3  4  5  6  7  8  9 10

In R lassen sich solch kontinuierliche Reihen mit einem : erzeugen:

# auch Zahlenreihe von 1 bis 10 
zahlen <- 1:10

# ausgeben 
zahlen
##  [1]  1  2  3  4  5  6  7  8  9 10

In Kombination mit c() geht auch:

# neuer Vektor aus 2 Zahlenreihen 
zahlen2 <- c(1:10, 100:110)

# ausgeben 
zahlen2
##  [1]   1   2   3   4   5   6   7   8   9  10 100 101 102 103 104 105 106 107 108
## [20] 109 110

Mit der Funktion seq() lassen sich Sequenzen erstellen. Wir übergeben der Funktion Start- und Endpunkt, und in welchen Schritten gezählt werden soll. Eine Zahlenreihe von 1 bis 10 in den Schritten 0.5 erzeugt man so:

# eine Sequenz erstellen 
sequenz <- seq(from=1, to=10, by=0.5)

# ausgeben 
sequenz
##  [1]  1.0  1.5  2.0  2.5  3.0  3.5  4.0  4.5  5.0  5.5  6.0  6.5  7.0  7.5  8.0
## [16]  8.5  9.0  9.5 10.0

oder schlicht

# erstellt die selbe Sequenz 
sequenz <- seq(1, 10, 0.5)

# ausgeben 
sequenz
##  [1]  1.0  1.5  2.0  2.5  3.0  3.5  4.0  4.5  5.0  5.5  6.0  6.5  7.0  7.5  8.0
## [16]  8.5  9.0  9.5 10.0

Mit der Funktion rep() (für repeat) lassen sich wiederholte Werte erzeugen

# erzeuge 20 wiederholte Werte, 
# 20 mal "weiblich" 
geschlecht <- rep("weiblich", 20)

# ausgeben 
geschlecht
##  [1] "weiblich" "weiblich" "weiblich" "weiblich" "weiblich" "weiblich"
##  [7] "weiblich" "weiblich" "weiblich" "weiblich" "weiblich" "weiblich"
## [13] "weiblich" "weiblich" "weiblich" "weiblich" "weiblich" "weiblich"
## [19] "weiblich" "weiblich"

In Kombination mit c() geht auch:

# erzeuge 20 wiederholte Werte, 
# 10 mal "weiblich" und 10 mal "maennlich" 
geschlecht <- c(rep("weiblich", 10), rep("maennlich", 10))
# ausgeben 
geschlecht
##  [1] "weiblich"  "weiblich"  "weiblich"  "weiblich"  "weiblich"  "weiblich" 
##  [7] "weiblich"  "weiblich"  "weiblich"  "weiblich"  "maennlich" "maennlich"
## [13] "maennlich" "maennlich" "maennlich" "maennlich" "maennlich" "maennlich"
## [19] "maennlich" "maennlich"

Oder anders verschachtelt:

# erzeuge 20 wiederholte Werte, anders verschachtelt 
# 10 mal das Paar "weiblich" "maennlich" 
geschlecht <- rep(c("weiblich", "maennlich"), 10)
# ausgeben 
geschlecht
##  [1] "weiblich"  "maennlich" "weiblich"  "maennlich" "weiblich"  "maennlich"
##  [7] "weiblich"  "maennlich" "weiblich"  "maennlich" "weiblich"  "maennlich"
## [13] "weiblich"  "maennlich" "weiblich"  "maennlich" "weiblich"  "maennlich"
## [19] "weiblich"  "maennlich"

5.1 Zufallszahlen

In R lassen sich auch Zufallszahlen generieren. Hierfür steht die Funktion sample() zur Verfügung.

# erzeuge 20 Zufallswerte 
sample(20)
##  [1] 13 12  5  6 15 16  4 17  9 18 11  8  7 10  2  3 20 19  1 14

Der Bereich, aus welchem die Zahlen gezogen werden sollen, kann ebenfalls angegeben werden.

# erzeuge 20 Zufallswerte zwischen 150 und 250 
sample(150:250, 20)
##  [1] 193 210 183 219 212 153 248 184 238 235 192 156 181 202 247 158 171 159 242
## [20] 244

Über die Option replace kann angegeben werden, ob Werte auch doppelt vorkommen können (so genanntes zurücklegen).

# erzeuge 20 Zufallswerte zwischen 150 und 250 # MIT zurücklegen
sample(150:250, 20, replace=TRUE)
##  [1] 166 201 205 171 244 150 219 183 200 195 214 174 186 157 182 245 232 241 177
## [20] 197

Zudem bieten die in R implementierten Wahrscheinlichkeitsverteilungen

über ihre r-Funktionen (für random, siehe Kapitel 17) die Möglichkeit, zufällige Werte zu erzeugen.

Die Funktion runif() erzeugt Zufallswerte aus der “stetigen Gleichverteilung”. Standardmäßig liegen die Zufallswerte zwischen 0 und 1.

# erzeuge 20 Zufallswerte zwischen 0 und 1 
runif(20)
##  [1] 0.46598719 0.39003139 0.02006522 0.37697093 0.55991284 0.85708359
##  [7] 0.38480971 0.52791704 0.60063752 0.26137136 0.29005016 0.48007517
## [13] 0.92000555 0.40072018 0.21317271 0.67176682 0.05861411 0.99706914
## [19] 0.14903547 0.51855664

Man kann aber (ähnlich wie bei sample()) den Bereich festlegen, aus welchem die Werte gezogen werden sollen.

# erzeuge 20 Zufallswerte zwischen 30 und 150 
runif(20, min=30, max=150)
##  [1] 131.53441 116.19237  58.95768  95.64520 130.17622  33.35472  86.32612
##  [8] 126.68160 127.68616  78.46932  56.21172  80.20337 110.26449  90.91803
## [15] 109.24312  91.41496 130.26629 115.05374 134.90471  31.37754

Für ganzzahlige Werte können die Rundungsfunktionen round(), floor() und ceiling() eingeschoben werden.

# erzeuge 20 GANZZAHLIGE Zufallswerte zwischen 30 und 150
floor(runif(20, min=30, max=150))
##  [1] 136 149  90  73 122 100 106 133  98  60 140 134  59  78 122  44  53  49 109
## [20] 132

Um Zufallszahlen aus der Standardnormalverteilung zu generieren eignet sich die Funktion rnorm().

# erzeuge 40 zufällige Werte aus der \# Standardnormalverteilung
normal <- rnorm(40)

# ausgeben 
normal
##  [1]  1.4505432  0.1943924 -0.6912054  1.3398599  2.7361084 -0.9441017
##  [7] -1.7810619 -0.7160587  0.9110785 -0.7721921 -0.7820777 -0.4321952
## [13] -0.6675648  1.3895059  0.9118739  0.2053894  2.5844322 -0.7893881
## [19]  0.5880771 -0.7112873  1.5849968  0.6763896 -0.2327618  0.6374729
## [25] -1.3707612 -1.4256595 -1.2461920 -0.6832669 -0.9796754 -0.4625191
## [31]  1.2145097 -1.2778199  0.7478688  3.3915088  1.6193896 -1.8508898
## [37]  1.0554223 -0.8053435  1.5961720  0.7759900

Somit erzeugt rt() zufällige Werte aus der t-Verteilung.

# erzeuge 40 zufällige Werte aus der \# t-Verteilung bei 10 Freiheitsgraden 
t <- rt(40, df=10)

# ausgeben 
t
##  [1]  0.80816081  0.63464272 -1.04867067  0.28763708  1.46970112 -1.67681763
##  [7]  0.76374895  0.35673699  0.43852070  0.02057365 -0.31623317 -0.60273538
## [13]  0.71802180 -0.26756381  1.17957855  0.62269651 -0.21301326 -0.75593568
## [19]  0.21687205 -1.16856330  0.43970628 -1.38123836 -0.20136631  1.64734295
## [25] -1.64091019 -0.30674880 -2.31814854  0.57115467  0.55923590  0.16815230
## [31]  0.26530835 -0.71421268 -1.60675413  0.07215224 -0.72087588  2.21050387
## [37]  2.16195314  0.95226057 -0.51923006  0.84492165