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))

  • 7502 Accesses

Zusammenfassung

Die folgenden Abschnitte sollen gleichzeitig die grundlegenden Datenstrukturen in R sowie Möglichkeiten zur deskriptiven Datenauswertung erläutern. Die Reihenfolge der Themen ist dabei so gewählt, dass die abwechselnd vorgestellten Datenstrukturen und darauf aufbauenden deskriptiven Methoden nach und nach an Komplexität gewinnen.

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 44.99
Price excludes VAT (USA)
  • Available as EPUB and PDF
  • Read on any device
  • Instant download
  • Own it forever
Softcover Book
USD 59.99
Price excludes VAT (USA)
  • Compact, lightweight edition
  • Dispatched in 3 to 5 business days
  • Free shipping worldwide - see info

Tax calculation will be finalised at checkout

Purchases are for personal use only

Institutional subscriptions

Notes

  1. 1.

    Ein leerer Vektor entsteht analog, z. B. durch numeric(0). Auf 32bit-Systemen kann ein Vektor höchstens  .Machine$integer.max viele (\(2^{31}-1\)) Elemente enthalten, auf heutigen 64bit-Systemen jedoch gut \(2^{50}\). Mit   lassen sich beliebige Objekte der für mode genannten Klasse der Länge n erzeugen.

  2. 2.

    Für Hilfe zu diesem Thema s. ?Extract. Auch der Index-Operator ist eine Funktion, kann also gleichermaßen in der Form verwendet werden (Abschn. 1.2.5, Fußnote 21).

  3. 3.

    Dies mag selbstverständlich erscheinen, in anderen Sprachen wird jedoch oft der Index 0 für die erste Position und allgemein der Index \(i-1\) für die i-te Position verwendet. Für einen Vektor x ist das Ergebnis von x[0] immer ein leerer Vektor mit demselben Datentyp wie jener von x.

  4. 4.

    Als Indizes dürfen in diesem Fall keine fehlenden Werte (NA) oder Indizes mit positivem Vorzeichen vorkommen, ebenso darf der Indexvektor nicht leer sein.

  5. 5.

    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 und dem Datentyp angelegt werden, die sie später benötigen.

  6. 6.

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

  7. 7.

    Namen werden als Attribut gespeichert und sind mit sichtbar (Abschn. 1.4). Elemente lassen sich über den Namen nur auswählen, nicht aber mittels ausschließen, hierfür bedarf es des numerischen Index.

  8. 8.

    Diese Situation tritt am ehesten unbeabsichtigt ein. Entweder liegt eine Verwechslung mit & bzw. | vor, oder die Ausdrücke mit den logischen Vektoren als Ergebnis sollten eigentlich nur einen Wert zurückgeben. Eine zukünftige Version von R wird in solchen Fällen eine Warnung ausgeben. Dieses Verhalten kann auch mit Sys.setenv("_R_CHECK_LENGTH_1_LOGIC2_"="warn") erreicht werden.

  9. 9.

    Dabei erzeugt all(numeric(0)) das Ergebnis TRUE, da die Aussage „alle Elemente des leeren Vektors sind WAHR“ logisch WAHR ist – schließlich lässt sich kein Gegenbeispiel in Form eines Elements finden, das FALSCH wäre. Dagegen erzeugt any(numeric(0)) das Ergebnis FALSE, da in einem leeren Vektor nicht mindestens ein Element existiert, das WAHR ist.

  10. 10.

    Umgekehrt lassen sich auch die in gespeicherten numerischen Indizes für in logische verwandeln: (Abschn. 2.3.2, 2.4.1).

  11. 11.

    Das Paket sets (D. Meyer und Hornik 2009) stellt eine eigene Klasse zur Repräsentation von Mengen zur Verfügung und implementiert auch einige hier nicht behandelte Mengenoperationen – etwa das Bilden der Potenzmenge.

  12. 12.

    Wenn hier und im Folgenden von Zufallszahlen die Rede ist, sind immer Pseudozufallszahlen gemeint. Diese kommen nicht im eigentlichen Sinn zufällig zustande, sind aber von tatsächlich zufälligen Zahlenfolgen fast nicht zu unterscheiden. Pseudozufallszahlen hängen deterministisch vom Zustand des die Zahlen produzierenden Generators ab. Wird sein Zustand über   festgelegt, kommt bei gleicher bei späteren Aufrufen von Zufallsfunktionen immer dieselbe Folge von Werten zustande. Dies gewährleistet die Reproduzierbarkeit von Auswertungsschritten bei Simulationen (Abschn. 4.4). Nach welcher Methode Zufallszahlen generiert werden, ist konfigurierbar und kann auch von der R Version abhängen, s. ?Random.

  13. 13.

    Der die Breite (Dispersion) einer Normalverteilung charakterisierende Parameter ist hier die Streuung \(\sigma \), in der Literatur dagegen häufig die Varianz \(\sigma ^{2}\).

  14. 14.

    Sofern keine fehlenden Werte NA im Vektor vorhanden sind (Abschn. 2.13.5). Mit x_ord als dem mit Hilfe der Indizes idx sortierten Vektor x gilt dann auch, dass x_ord[order(idx)] die ursprüngliche Reihenfolge wiederherstellt.

  15. 15.

    Das Paket car (Fox und Weisberg 2020) bietet hierfür die Funktion some(), die sich auch für Matrizen (Abschn. 2.8) oder Datensätze (Abschn. 2.11) eignet.

  16. 16.

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

  17. 17.

    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 den Stufen und der internen Codierung kommen: unclass(factor(10:15)) ergibt 1 2 3 4 5 6. Dies ist bei der üblichen Verwendung von Faktoren aber irrelevant.

  18. 18.

    Sind dessen Elemente Zeichenketten mit numerischer Bedeutung, so ist zu beachten, dass die Reihenfolge dennoch alphabetisch bestimmt wird – die Stufe käme demnach vor der Stufe

  19. 19.

    Viele von ihnen werden in   Desc() aus dem Paket DescTools integriert.

  20. 20.

    Bei Gleitkommazahlen kumulieren sich bei wiederholter Multiplikation Rundungsfehler, die durch die interne Darstellungsart solcher Zahlen unvermeidlich sind (Abschn. 1.4.6). Numerisch stabiler als ist deswegen u. U. die Rücktransformation der Summe der logarithmierten Werte mit als Umsetzung von \(\exp \left( \sum _{i}{\ln x_{i}}\right) \) – vorausgesetzt x ist echt positiv. prod(numeric(0)) ist gleich 1.

  21. 21.

    Für natürliche Zahlen gilt \(n! = \Gamma (n+1)\), in R als berechenbar.

  22. 22.

    Hier ist zu beachten, dass x tatsächlich ein etwa mit c(...) gebildeter Vektor ist: Der Aufruf mean(1, 7, 3) gibt anders als mean(c(1, 7, 3)) nicht den Mittelwert der Daten 1, 7, 3 aus. Stattdessen ist die Ausgabe gleich dem ersten übergebenen Argument.

  23. 23.

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

  24. 24.

    Für ein Diversitätsmaß kategorialer Daten s. Abschn. 2.7.7 und für robuste Varianzschätzer Abschn. 2.7.9.

  25. 25.

    Als Alternative lässt sich cov.wt() verwenden (Abschn. 2.8.10).

  26. 26.

    Zudem gilt folgende Beziehung zur diskreten Kullback-Leibler-Divergenz \(\text {KL}_{\text {eq}}\) der beobachteten Häufigkeiten zur Gleichverteilung: \(H = -\frac{1}{\ln p} \text {KL}_{\text {eq}} + 1\).

  27. 27.

    Das Paket polycor (Fox 2019) beinhaltet Funktionen für die polychorische und polyseriale Korrelation zur Schätzung der latenten Korrelation von künstlich in Kategorien eingeteilten Variablen, die eigentlich stetig sind. Für die multiple Korrelation i. S. der Wurzel aus dem Determinationskoeffizienten \(R^{2}\) in der multiplen linearen Regression s. Abschn. 6.2.2. Die kanonische Korrelation zweier Gruppen von Variablen, die an denselben Beobachtungsobjekten erhoben wurden, ermittelt  cancor().

  28. 28.

    Wohl aber das Paket DescTools mit  PartCor().

  29. 29.

    Die Funktion multipliziert den eigentlichen Median der absoluten Abweichungen mit dem Faktor 1.4826, der über das Argument constant auf einen anderen Wert gesetzt werden kann. Der Faktor ist so gewählt, dass der Kennwert bei normalverteilten Variablen asymptotisch mit der Streuung übereinstimmt, da für standardnormalverteilte Variablen X gilt: \(E(\text {MAD}(X)) = 0.6745 = \frac{1}{1.4826}\).

  30. 30.

    Abschnitte 3.3.11 und 3.4.10 illustrieren das analoge Vorgehen in Situationen, wenn die Variablen Teil eines Datensatzes sind.

  31. 31.

    Vor dem Aufruf von FUN verlängert outer() X und Y 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.

  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 zeigt, sind Matrizen intern lediglich Vektoren mit einem Attribut (Abschn. 1.4), das Auskunft über die Dimensionierung der Matrix, also die Anzahl ihrer Zeilen und Spalten liefert. Eine Matrix kann deshalb maximal so viele Werte speichern, wie ein Vektor Elemente besitzen kann (Abschn. 2.1.1, Fußnote 1). Für Rechenoperationen mit Matrizen im Kontext der linearen Algebra s. Abschn. 12.1.

  33. 33.

    Indem einer Liste (Abschn. 2.10) eine Dimensionierung als Attribut hinzugefügt wird, lässt sich diese Einschränkung indirekt umgehen: erstellt eine heterogene Matrix. Dies bietet jedoch in üblichen Anwendungen keine Vorteile.

  34. 34.

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

  35. 35.

    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.

  36. 36.

    c() entfernt die Attribute der übergebenen Argumente bis auf ihre Elementnamen. Matrizen verlieren damit ihre Dimensionierung dim und ihre Klasse matrix.

  37. 37.

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

  38. 38.

    Dagegen bleibt ageMat[FALSE, FALSE] eine leere Matrix mit 0 Zeilen und 0 Spalten.

  39. 39.

    Bei nicht quadratischen \((p \times q)\)-Matrizen \(\textit{\textbf{X}}\) sind dies die Elemente \(x_{11}, \ldots , x_{pp}\) (für \(p < q\)) bzw. \(x_{11}, \ldots , x_{qq}\) (für \(p > q\)).

  40. 40.

    Die Funktion sortiert stabil: Zeilen mit gleich großen Werten des Sortierkriteriums behalten ihre Reihenfolge relativ zueinander bei, werden also beim Sortiervorgang nicht zufällig vertauscht.

  41. 41.

    So, wie sich Matrizen mit cbind() und rbind() aus Vektoren zusammenstellen lassen, ermöglicht abind() aus dem gleichnamigen Paket (Plate und Heiberger 2016) das Verbinden von Matrizen zu einem array.

  42. 42.

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

  43. 43.

    Hervorzuheben sind DAAG (Maindonald und Braun 2020, carData (Fox et al. 2019) und HSAUR3 (Hothorn und Everitt 2018).

  44. 44.

    Außer bei sehr großen Datensätzen, die sich effizienter als Matrix verarbeiten lassen.

  45. 45.

    Gleiches gilt für Listen – hier werden die Komponenten als separate Vektoren gewertet. Soll dieses Verhalten verhindert werden, um eine Liste als eine einzelne Variable des Datensatzes zu erhalten, muss sie in I() eingeschlossen werden: . Datensätze mit Listen als Variablen werden hier zur Vereinfachung nicht weiter betrachtet.

  46. 46.

    Für die automatisierte Simulation von Datensätzen nach vorgegebenen Kriterien, etwa hinsichtlich der Gruppen-Effekte, vgl. die Funktionen des Pakets psych (Revelle 2020).

  47. 47.

    Das Komma ist von Bedeutung: So gibt etwa wie in Listen nicht die dritte Variable von zurück, sondern einen Datensatz, dessen einzige Komponente diese Variable ist.

  48. 48.

    Namen werden als Attribut gespeichert und sind mit sichtbar (Abschn. 1.4).

  49. 49.

    Bei sehr großen Datensätzen empfiehlt es sich daher aus Gründen der Speichernutzung, nur eine geeignete Teilmenge von Fällen mit attach() verfügbar zu machen (Abschn. 3.3.2).

  50. 50.

    Fehlende Werte können mit in die Auszählung einbezogen werden, indem der Vektor in addNA() eingeschlossen wird.

  51. 51.

    Analog .

  52. 52.

    Die hier relevante Unterscheidung zwischen den Szenarien missing completely at random (MCAR), missing at random (MAR) und not missing at random (NMAR) erläutert van Buuren (2018).

  53. 53.

    Für jeden Datentyp existiert jeweils eine passende Konstante, nämlich NA_real_, NA_integer_ und NA_character_. All diese Konstanten werden aber als NA angezeigt. Der mit typeof(NA) ausgegebene Basis-Datentyp ist logical. Damit ist die Ausgabe etwa von c(1, 2, 3)[NA] gleich NA NA NA, da logische Indexvektoren zyklisch verlängert werden (Abschn. 2.1.2, 2.2.2).

  54. 54.

    In solchen Situationen ist also NA die Ausgabe eines gültigen Elements und von einem fehlenden Wert zu unterscheiden. So erzeugt factor(c("A", "NA", "C"))[c(NA, 2, 3)] die Ausgabe . Einzig die gültige Faktorstufe lässt sich in der Ausgabe nicht von einem fehlenden Wert unterscheiden. In diesem Fall kann nur mit Hilfe von is.na() festgestellt werden, ob es sich tatsächlich um einen fehlenden Wert handelt.

  55. 55.

    Der == Operator eignet sich nicht zur Prüfung auf fehlende Werte, da das Ergebnis von selbst NA ist (Abschn. 2.13.3). Da die Unterscheidung zwischen not a number und missing nicht zuverlässig möglich ist, ergibt auch die Prüfung is.na(NaN) das Ergebnis TRUE.

  56. 56.

    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.

  57. 57.

    Eine mit diesem Verfahren ermittelte Matrix kann auch nicht positiv semidefinit sein, und stellt dann keine Kovarianzmatrix bzw. Korrelationsmatrix im engeren Sinne dar.

  58. 58.

    Das Paket stringr (Wickham 2019b) stellt für viele der im Folgenden aufgeführten Funktionen Alternativen bereit, die den Umgang mit Zeichenketten erleichtern und konsistenter gestalten sollen.

  59. 59.

    Alternativ kann fmt in einfache Anführungszeichen gesetzt werden, innerhalb derer sich dann auch doppelte Anführungszeichen ohne voranstehenden backslash befinden können (Abschn. 1.4.5, Fußnote 33).

  60. 60.

    Die Ausgabe ist ggf. mit unlist() (Abschn. 2.10.3) in einen Vektor, oder mit bzw. in eine Matrix umzuwandeln, wenn die Listenkomponenten dieselbe Länge besitzen. Weitere Möglichkeiten der Weiterverarbeitung von Listen zeigt Abschn. 3.3.12.

  61. 61.

    adist() berechnet die Levenshtein-Distanz zwischen zwei Zeichenketten als Maß für die Anzahl notwendiger elementarer Editiervorgänge, um eine Zeichenkette in die andere zu ändern. Über die Levenshtein-Distanz können mit agrep() auch ungefähr passende Zeichenketten gefunden werden. Weitere Ansätze hierfür sind im Paket stringdist (van der Loo 2014) vorhanden.

  62. 62.

    Solcherart erstellte Objekte können mit  deparse() wieder in Zeichenketten umgewandelt werden.

  63. 63.

    Für die Auswertung von Zeitreihen vgl. Shumway und Stoffer (2016); Hyndman und Athanasopoulos (2019) sowie den Abschnitt Time Series Analysis der CRAN Task Views (Hyndman 2020).

  64. 64.

    Für eine einführende Behandlung der vielen für Zeitangaben existierenden Subtilitäten vgl. Grothendieck und Petzoldt (2004) sowie ?DateTimeClasses. Der Umgang mit Zeit- und Datumsangaben wird durch Funktionen des Pakets lubridate (Grolemund und Wickham 2011) erleichtert, das [Wickham und Grolemund 2017, Kap. 16] eingehend vorstellen: http://r4ds.had.co.nz/dates-and-times.html

  65. 65.

    Siehe Abschn. 2.14.2 für format strings allgemein sowie ?strptime für weitere mögliche Elemente bei Datumsangaben. Wenn das Betriebssystem es unterstützt, kann man mit   temporär die Ländereinstellung ändern, um mit Namen für Wochentage und Monate in unterschiedlichen Sprachen umgehen zu können. Die aktive Einstellung gibt   Sys.getlocale() aus.

  66. 66.

    Durch Verwendung von Dezimalzahlen lassen sich Sekundenbruchteile, etwa Millisekunden, repräsentieren.

  67. 67.

    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(), um welche Einheit es sich handeln soll.

Author information

Authors and Affiliations

Authors

Corresponding author

Correspondence to Daniel Wollschläger .

Rights and permissions

Reprints and permissions

Copyright information

© 2020 Springer-Verlag GmbH Deutschland, ein Teil von Springer Nature

About this chapter

Check for updates. Verify currency and authenticity via CrossMark

Cite this chapter

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

Download citation

Publish with us

Policies and ethics