Skip to main content

Elementare Dateneingabe und -verarbeitung

  • Chapter
  • First Online:
Grundlagen der Datenanalyse mit R

Part of the book series: Statistik und ihre Anwendungen ((STATIST))

  • 4107 Accesses

Zusammenfassung

Im folgenden Abschnitt sollen gleichzeitig die grundlegenden Datenstrukturen in R sowie Möglichkeiten zur deskriptiven Datenauswertung erläutert werden.

This is a preview of subscription content, log in via an institution to check access.

Access this chapter

Chapter
USD 29.95
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
eBook
USD 29.99
Price excludes VAT (USA)
  • Available as EPUB and PDF
  • Read on any device
  • Instant download
  • Own it forever

Tax calculation will be finalised at checkout

Purchases are for personal use only

Institutional subscriptions

Notes

  1. 1.

    R ähnelt in der Vektorbasiertheit anderen befehlsgesteuerten Programmen zur allgemeinen wissenschaftlichen Datenverarbeitung wie z. B. Mathematica oder MATLAB (bzw. GNU Octave).

  2. 2.

    Ein leerer Vektor entsteht analog, z. B. durch logical(0).

  3. 3.

    Für Hilfe zu diesem Thema vgl. ?Extract. Auch der Index-Operator ist eine Funktion, kann also gleichermaßen in der Form "["(〈Vektor〉, 〈Index〉) verwendet werden (vgl. Abschn. 1.2.5, Fußnote 15).

  4. 4.

    Dies mag zunächst selbstverständlich erscheinen, in anderen Sprachen wird jedoch oft der Index 0 für die erste Position und allgemein der Index \(n-1\) für die n-te Position verwendet.

  5. 5.

    Als Indizes dürfen in diesem Fall keine fehlenden Werte (NA) vorkommen, ebenso darf der Indexvektor nicht leer sein, muss also eine Länge größer als 0 besitzen.

  6. 6.

    Bei der Verarbeitung sehr großer Datenmengen ist zu bedenken, dass die schrittweise Vergrößerung von Objekten aufgrund der dafür notwendigen internen Kopiervorgänge ineffizient ist. Objekte sollten deshalb bevorzugt bereits mit der Größe angelegt werden, die sie später benötigen.

  7. 7.

    Allgemein gesprochen werden alle Elemente in den umfassendsten Datentyp umgewandelt, der notwendig ist, um alle Werte ohne Informationsverlust zu speichern (vgl. Abschn. 1.3.5).

  8. 8.

    Beide Funktionen sortieren stabil: Elemente gleicher Größe behalten ihre Reihenfolge relativ zueinander bei, werden also beim Sortiervorgang nicht zufällig vertauscht.

  9. 9.

    Namen werden als Attribut gespeichert und sind mit attributes(〈Vektor〉) sichtbar (vgl. Abschn. 1.3).

  10. 10.

    Dieser Vorgang geschieht auch, wenn ein Vektor mit einer Zahl verrechnet wird – in diesem Fall wird die Zahl in einen Vektor passender Länge umgewandelt, dessen Elemente alle aus dieser Zahl bestehen.

  11. 11.

    Für x kann auch eine Matrix übergeben werden, deren z-transformierte Spalten dann die Spalten der ausgegebenen Matrix ausmachen (vgl. Abschn. 2.8).

  12. 12.

    Umgekehrt lassen sich auch die in 〈Indexvektor〉 gespeicherten numerischen Indizes für 〈Vektor〉 in logische verwandeln: seq(along=〈Vektor〉) %in% 〈Indexvektor〉 (vgl. Abschn. 2.4.1 und 2.3.2).

  13. 13.

    Die Funktion recode() aus dem car Paket (Fox, 2009) bietet eine weitere Möglichkeit, Werte nach einem bestimmten Muster durch andere zu ersetzen.

  14. 14.

    Bei numerischen Variablen ist dies einfacher mit der Funktion cut() zu erreichen, vgl. Abschn. 2.7.6.

  15. 15.

    Die  symmetrische  Differenz zweier Mengen ergibt sich also aus union(setdiff(〈Menge1〉, 〈Menge2〉), setdiff(〈Menge2〉, 〈Menge1〉)).

  16. 16.

    Werden alle Elemente einer Grundmenge ohne Zurücklegen unter Beachtung der Reihenfolge gezogen, handelt es sich um eine sog. Permutation. Die Funktion permn() aus dem combinat Paket (Chasalow, 2009) stellt alle n! Permutationen einer Grundmenge mit n Elementen als Komponenten einer Liste zusammen (vgl. Abschn. 3.1).

  17. 17.

    Dasselbe Ergebnis ließe sich auch durch Verwendung der apply() Funktion erzielen (vgl. Abschn. 2.8.7): apply(combn(c(1, 2, 3, 4), 3), 2, sum).

  18. 18.

    Wenn hier und im folgenden von Zufallszahlen die Rede ist, sind immer sog. Pseudozufallszahlen gemeint. Diese kommen nicht im eigentlichen Sinn zufällig zustande, sind aber von tatsächlich zufälligen Zahlenfolgen im Ergebnis fast nicht zu unterscheiden. Pseudozufallszahlen hängen deterministisch vom sog. Zustand des die Zahlen produzierenden Generators ab. Wird sein Zustand über die Funktion set.seed(〈Zahl〉) festgelegt, kommt bei gleicher 〈Zahl〉 bei späteren Aufrufen von Zufallsfunktionen immer dieselbe Folge von Werten zustande. Dies gewährleistet die Reproduzierbarkeit von Auswertungsschritten bei Simulationen mit Zufallsdaten. Nach welcher Methode Zufallszahlen generiert werden, ist konfigurierbar, vgl. ?RNGkind . Für tatsächliche Zufallszahlen vgl. das Paket random (Eddelbuettel, 2009).

  19. 19.

    Der die Breite (Dispersion) einer Normalverteilung charakterisierende Parameter ist in R-Funktionen immer die Streuung σ, in der Literatur dagegen häufig die Varianz σ 2.

  20. 20.

    Genauso gilt für natürliche Zahlen \(n! = \Gamma(n+1)\), in R als gamma(〈Zahl〉 + 1) berechenbar. Bei Dezimalzahlen begünstigt die wiederholte Multiplikation die Kumulation von Rundungsfehlern, die durch die interne Darstellung solcher Zahlen unvermeidlich sind (vgl. Abschn. 1.3.6, Fußnote 26). Numerisch stabiler als prod(〈Vektor〉) ist deswegen u. U. die Rücktransformation der Summe der logarithmierten Werte mit exp(sum(log(〈Vektor〉))).

  21. 21.

    Oder auch mit sum(prop.table(table(〈Vektor〉))*sort(unique(〈Vektor〉))) als Umsetzung der Formel \(\sum{x_{i} \cdot h(x_{i})}\), wenn \(h(x_{i})\) die relative Häufigkeit eines Wertes x i ist (vgl. Abschn. 2.11). Für das geometrische und harmonische Mittel vgl. die Funktionen geometric.mean() bzw. harmonic.mean() aus dem psych Paket (Revelle, 2009).

  22. 22.

    Zur Berechnung von Quantilen stehen verschiedene Verfahren zur Verfügung, vgl. ?quantile.

  23. 23.

    Als Alternative ließe sich die cov.wt() Funktion verwenden, vgl. Abschn. 2.8.9.

  24. 24.

    Als Alternative ließe sich die cov.wt() Funktion verwenden, vgl. Abschn. 2.8.9.

  25. 25.

    Die kanonische Korrelation zweier Gruppen von an denselben Beobachtungsobjekten erhobenen Variablen ermittelt cancor(). Für die multiple Korrelation im Sinne der Wurzel aus dem Determinationskoeffizienten R 2 in der multiplen linearen Regression vgl. Abschn. 7.2.1.

  26. 26.

    Wohl aber das Paket ggm mit der pcor() Funktion (Marchetti und Drton, 2010).

  27. 27.

    Vor dem Aufruf von FUN verlängert outer() jeweils X und Y mit Hilfe von rep() so, dass beide die Länge length(X)*length(Y) besitzen und sich aus der Kombination der Elemente mit gleichem Index alle geordneten Paare ergeben.

  28. 28.

    Trotz dieser Codierung können Faktoren keinen mathematischen Transformationen unterzogen werden. Wenn die Namen der Faktorstufen aus Zahlen gebildet werden, kann es zu Diskrepanzen zwischen Levels und interner Codierung kommen: unclass(factor(10:15)) ergibt 1 2 3 4 5 6. Dies ist bei der üblichen Verwendung von Faktoren aber irrelevant.

  29. 29.

    Sind die Namen der Faktorstufen dagegen nicht aus Zahlen, sondern aus anderen Zeichen gebildet, ist das Ergebnis NA, vgl. Abschn. 1.3.5..

  30. 30.

    Sind die Bezeichnungen Zeichenketten mit numerischer Bedeutung, so ist zu beachten, dass die Reihenfolge dennoch alphabetisch bestimmt wird – die Stufe "10" käme demnach vor der Stufe "4".

  31. 31.

    Eine erweiterte Version dieser Funktion ist cut2() aus dem Hmisc Paket.

  32. 32.

    Eine Matrix ist in R zunächst nur eine rechteckige Anordnung von Werten und nicht mit dem gleichnamigen mathematischen Konzept zu verwechseln. Wie attributes(〈Matrix〉) zeigt, sind Matrizen intern lediglich Vektoren mit einem Attribut, das Auskunft über die Dimensionierung der Matrix, also die Anzahl ihrer Zeilen und Spalten liefert, vgl. Abschn. 3.1.

  33. 33.

    Allgemein gesprochen werden alle Elemente in den umfassendsten Datentyp umgewandelt, der notwendig ist, um alle Werte ohne Informationsverlust zu speichern (vgl. Abschn. 1.3.5).

  34. 34.

    Da Matrizen numerisch effizienter als Objekte der Klasse data.frame verarbeitet werden können, sind sie dagegen bei der Analyse sehr großer Datenmengen vorzuziehen.

  35. 35.

    Eine Matrix kann auch über die dim() Funktion in ein eindimensionales Objekt umgewandelt werden, indem dim() nur ein einzelner Wert, nämlich die Länge des Vektors, als Dimensionierung zugewiesen wird. Das Ergebnis dieser Umwandlung ist aber ein Objekt der Klasse array (vgl. Abschn. 2.10).

  36. 36.

    Für Hilfe zu diesem Thema vgl. ?Extract.

  37. 37.

    Bei Zuweisungen unterscheiden sich jedoch 〈Matrix〉 <– … und 〈Matrix〉[] <– … voneinander. Der erste Befehl erstellt ein vollständig neues Objekt, mit dem das alte desselben Namens überschrieben wird. Mit dem zweiten Befehl werden dagegen nur die Elemente der bestehenden Matrix überschrieben, was im Fall sehr großer Matrizen numerisch effizienter ist.

  38. 38.

    Bei sehr großen Datensätzen können Rechenoperationen für Matrizen die Auswertungszeit entscheidend bestimmen. Ist die Effizienz der numerischen Berechnungen wichtig, empfiehlt es sich daher, auf eine für den im Computer verwendeten Prozessor optimierte Version der sog. BLAS-Bibliothek (Basic Linear Algebra Subprograms) von R zurückzugreifen (vgl. Frage 8.2 in Ripley und Murdoch, 2009). Zudem sollten Matrizen nicht dynamisch erweitert, sondern bereits mit der Dimensionierung erstellt werden, die sie später benötigen (vgl. Abschn. 2.1.2, Fußnote 6).

  39. 39.

    Die Beispiele zeigen nur eine – numerisch eher ineffiziente – Möglichkeit von mehreren, um diese Matrizen zu erzeugen. Vergleiche insbesondere sweep() zum spaltenweisen Zentrieren von Matrizen und row() bzw. col(), um Elemente durch ihren Zeilen- bzw. Spaltenindex zu ersetzen.

  40. 40.

    Für die Pseudoinverse vgl. ginv() aus dem MASS Paket (Venables und Ripley, 2002).

  41. 41.

    Für nicht invertierbare \((p \times p)\)-Matrizen A \((\mathrm{Rang}(A)<p)\) ermittelt die Null() Funktion aus dem MASS Paket eine Basis des Kerns von A (engl. Null Space bzw. Kernel).

  42. 42.

    Für verschiedene Matrixnormen vgl. die norm() Funktion aus dem Matrix Paket (Bates und Mächler, 2010).

  43. 43.

    Jede Transformation der Form \(A \cdot S^{-1/2} \cdot (x-\overline{x})\) mit A als Orthogonalmatrix \((A^{t} = A^{-1})\) würde ebenfalls eine multivariate z-Transformation liefern.

  44. 44.

    Eigenwerte werden entsprechend ihrer algebraischen Multiplizität ggf. mehrfach aufgeführt. Auch Matrizen mit komplexen Eigenwerten sind zugelassen. Da in der Statistik vor allem Eigenwerte von Kovarianzmatrizen interessant sind, konzentriert sich die Darstellung hier auf den einfacheren Fall symmetrischer Matrizen.

  45. 45.

    Ist das erste Argument von table() ein Vektor, können fehlende Werte über das Argument exclude=NULL mit in die Auszählung einbezogen werden. Damit in Faktoren vorkommende fehlende Werte unter einer eigenen Kategorie berücksichtigt werden, muss der Faktor NA als eigene Stufe enthalten und deshalb mit factor(〈Vektor〉, exclude=NULL) gebildet werden.

  46. 46.

    Neben den hier beschriebenen Methoden zur Behandlung fehlender Werte existieren auch andere Versuche, mit diesem Problem umzugehen. Das als Multiple Imputation bezeichnete Verfahren ersetzt fehlende Werte dabei durch solche Zahlen, die unter Berücksichtigung bestimmter Rahmenbedingungen generiert wurden und dabei Eigenschaften der tatsächlich vorhandenen Daten berücksichtigen sollen. Multiple Imputation wird in R u. a. durch die Pakete Hmisc, Amelia II (Honaker et al., 2009) und mice (van Buuren und Groothuis-Oudshoorn, 2010) unterstützt.

  47. 47.

    Der == Operator eignet sich nicht zur Prüfung auf fehlende Werte, da das Ergebnis von 〈Wert〉 == NA selbst NA ist (vgl. Abschn. 2.12.3).

  48. 48.

    Allgemein ist das Ergebnis aller Rechnungen NA, sofern der fehlende Wert für das Ergebnis relevant ist. Ist das Ergebnis auch ohne den fehlenden Wert eindeutig bestimmt, wird es ausgegeben – so erzeugt TRUE | NA die Ausgabe TRUE, da sich bei einem logischen ODER das zweite Argument nicht auf das Ergebnis auswirkt, wenn das erste WAHR ist.

  49. 49.

    Bei numerischen Matrizen rechnerisch effizient auch mit is.na(〈Matrix〉 %*% rep(1, ncol(〈Matrix〉))). Dies liefert einen Spaltenvektor zurück.

  50. 50.

    Alternativ kann fmt in einfache Anführungszeichen ’<<Format-String>>’ gesetzt werden, innerhalb derer sich dann auch doppelte Anführungszeichen ohne voranstehendes \ Symbol befinden können.

  51. 51.

    Die Ausgabe ist ggf. mit unlist() in einen Vektor umzuwandeln, vgl. Abschn. 3.1, insbesondere 3.1.2.

  52. 52.

    Solcherart erstellte Objekte können mit deparse(expr=〈Objekt〉) wieder in Zeichenketten umgewandelt werden.

  53. 53.

    Als Startpunkt für die Auswertung von Zeitreihen vgl. den Abschnitt TimeSeries der Task Views, (R Development Core Team, 2009a). Für eine einführende Behandlung der vielen für Zeitangaben existierenden Subtilitäten vgl. Ripley und Hornik (2001) sowie ?DateTimeClasses. Das Paket timeDate (Würtz und Chalabi, 2009) enthält viele weiterführende Funktionen zur Behandlung von Zeitangaben.

  54. 54.

    Vergleiche Abschn. 2.13.2 und ?strptime für weitere mögliche Elemente des Format-Strings.

  55. 55.

    Die Zeiteinheit der im difftime Objekt gespeicherten Werte (etwa Tage oder Minuten), hängt davon ab, aus welchen Datumsangaben das Objekt entstanden ist. Alternativ bestimmt das Argument units von difftime(〈Datum1〉, 〈Datum2〉, units), um welche Einheit es sich handeln soll.

References

Download references

Author information

Authors and Affiliations

Authors

Corresponding author

Correspondence to Daniel Wollschläger .

Rights and permissions

Reprints and permissions

Copyright information

© 2010 Springer-Verlag Berlin Heidelberg

About this chapter

Cite this chapter

Wollschläger, D. (2010). Elementare Dateneingabe und -verarbeitung. In: Grundlagen der Datenanalyse mit R. Statistik und ihre Anwendungen. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-642-12228-6_2

Download citation

Publish with us

Policies and ethics