Jakob Richter

Statistik, R, Fotografie und Sonstiges

R: Berechnung in Variable speichern und gleichzeitig Ausgeben

Wieder ein kleiner Trick für den R-Alltag. Häufig will man eine Berechnung durchführen, das Ergebnis in einer Variable speichern und auch das Ergebnis gleich mal sehen. Zum Beispiel ist es ja nicht schlecht bei der Anpassung eines (linearen) Modells gleich mal die geschätzten Parameter zu sehen, bevor man weiter damit arbeitet.

> (lm.trees <- lm(Height~.,data=trees)) Call: lm(formula = Height ~ ., data = trees) Coefficients: (Intercept) Girth Volume 83.2958 -1.8615 0.5756

apply() hoch 3

Nach dem Beitrag zu lapply() und sapply() möchte ich hier nun das etwas mächtigere (?) apply() vorstellen, was man in R wohl kaum missen will.

Ich werde kurz zeigen wie mit apply() Matrizen und data.frames zeilen- sowie spaltenweise Ausgewertet werden können. Nach dieser sehr leichten Übung widmen wir uns einem etwas trickreicherem Beispiel, in dem wir mehrere gleichartige Tabellen (also Matrizen bzw. data.frames) der gleichen Zeilen- und Spaltenanzahl vorliegen haben. Hier möchten wir die Informationen aus immer den gleichen Zellen zusammenfassen.
Weiterlesen »

merge() – eine kleine Einleitung

Es kann sein, dass man in die Situation kommt verschiedene Datensätze miteinander kombinieren zu wollen. In einer Tabelle steht vielleicht für verschiedene Lebensmittel die Energiewerte und Vitamingehalte und in einer anderen Tabelle steht wie viel von welchem Lebensmittel eine Person gegessen hat. Will man jetzt schnell berechnen, wie viele kcal jede Person zu sich genommen hat kann man das schnell und elegant durch mergen der Datensätze, gefolgt von aggregate() um die kcal für jeden Patienten zusammenzurechnen.
Das ist natürlich nur ein dämliches Beispiel. Der geneigte R-Nutzer wird schon seine eigenen Anwendungen finden. Oft ist es auch viel einfacher Berechnungen an einem Datensatz durchzuführen als Funktionen zu basteln, die sich Daten aus mehreren Datensätzen zusammensuchen.
Weiterlesen »

aggregate() – der Anfang

Jetzt möchte ich nur kurz die mir sehr lieb gewonnene R-Funktion aggregate() vorstellen. Wer die Funktionen sapply(), apply(), lapply() usw. schon kennt und gerne nutzt, ist vermutlich auch schon ab und zu auf das Problem gestoßen, dass man evtl. auch über mehrere Zeilen hinweg eine Funktion anwenden möchte.

Nutzfälle

Was ist z.B. wenn wir das arithmetische Mittel von immer 3 aufeinanderfolgenden Daten in einem Datensatz berechen wollen? Betrachten wir folgendes Beispiel:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
X < - rep(c(4,10,16),length.out=12)
Y <- runif(12)
XY <- cbind.data.frame(X,Y)
head(XY) #sollte ungefähr so aussehen
#    X          Y
# 1  4 0.05644781
# 2 10 0.58944284
# 3 16 0.35899530
# 4  4 0.07475402
# 5 10 0.75567801
# 6 16 0.94060689
jeweils <- 3
teile <- ceiling((1:nrow(XY))/jeweils)
teile
# [1] 1 1 1 2 2 2 3 3 3 4 4 4
aggregate(XY,by=list(teile),FUN=mean)
#   Group.1  X         Y
# 1       1 10 0.6196099
# 2       2 10 0.5319404
# 3       3 10 0.4377502
# 4       4 10 0.4572320
#Beachte: (4+10+16)/3=10

Weiterlesen »

Archiv

  • 2012 (28)