6.3. 🚀 Übung: Auswerten von CSV-Dateien in R#
In der vorangegangenen Übung wurden Sie mit Ansätzen zur Organisation und Strukturierung von CSV-Dateien vertraut gemacht. Der folgende Abschnitt baut auf dem Code der letzten Übung auf und thematisiert Auswertungsmöglichkeiten von CSV-Dateien in R mit Fokus auf Untergruppierungen und Filterfunktionen.
Den Code für die Übung: Arbeiten mit CSV-Dateien in R finden Sie hier:
#TidyVerse Package Installation
install.packages("tidyverse")
library(tidyverse)
#Daten einlesen
data_csv_clean <- read.csv2("Data/21341-0001_F_2020.csv", header = FALSE, encoding = "latin1")
#Ergebnisse ansehen
head(data_csv_clean)
#Umlaute entfernen
data_csv_clean$V1 <- str_replace_all(data_csv_clean$V1, c("ä" = "ae", "ö" = "oe", "ü" ="ue", "ß" ="ss"))
data_csv_clean$V2 <- str_replace_all(data_csv_clean$V2, c("ä" = "ae", "ö" = "oe", "ü" ="ue", "ß" ="ss"))
#Ausgewählte Ergebnisse ansehen
show(data_csv_clean[8:20,1:3])
#Tabelle unterteilen
Metadaten <- data_csv_clean[c(1:6, 87:88), 1]
Tabellendaten <- data_csv_clean[8:85, 1:3]
#Spaltenüberschriften setzen
colnames(Tabellendaten) <- c("Angestelltenverhaeltnis", "Geschlecht", "Angestelltenzahl_2020")
#Nummerierung neu setzen
row.names(Tabellendaten) <- 1:78
#Ergebnis ansehen
head(Tabellendaten)
6.3.1. Variablenklassen bestimmen#
Damit Sie Ihre Daten adäquat auswerten können, müssen Sie sich über die Struktur und Klasse der Variablen bewusst sein.
Die wichtigsten Variablenklassen im Überblick:
integer
: Ganze Zahlen.
Beispiel: 1, 2, 5.numeric
: Zahl mit Kommastellen.
Beispiel: 1.99, 2.33, 5.00.character
: Zeichenketten bzw. Strings.
Beispiel: “Hallo”, “Apfel”, “Hannah”.factor
: Kategoriale Variablen.
Beispiel: “schlecht”, “gut”, “sehr gut”
Die Variablenklasse ist ausschlaggebend dafür, wie Sie die
Variablendaten auswerten können. Beispielsweise können Sie mit einer
numeric
-Variable rechnen, mit einer character
-Variable jedoch
nicht.
Variablenklassen bestimmen im Code:
Der Befehl class()
gibt uns die jeweilige Klasse des Objektes wieder:
class(Tabellendaten$Angestelltenverhaeltnis) #sollte als character oder factor gelesen werden
class(Tabellendaten$Geschlecht) #sollte als character oder factor gelesen werden
class(Tabellendaten$Angestelltenzahl_2020) #sollte als numerisch oder integer gelesen werden
Die Variablenklassen für “Angestelltenverhaeltnis” und “Geschlecht” sind
passend. Die Variable “Angestelltenzahl_2020” wird jedoch auch als
character
interpretiert. Dies muss manuell geändert werden, da sonst
bestimmte Auswertungen nicht möglich sind und Fehler entstehen können.
Fallbeispiel: Betrachten Sie die Funktion max()
, welche den
Maximalwert in der jeweiligen Spalte zurückgeben soll. Hinweis:
na.rm = TRUE
muss hinzugefügt werden, damit die nicht vorhandenen
Werte nicht berücksichtigt werden, ansonsten kommt es zu einem Error.
max(Tabellendaten$Angestelltenzahl_2020, na.rm = TRUE)
Wenn Sie jedoch einen Blick in die Tabelle werfen, sehen Sie schnell, dass es mehrere Angestelltenzahlen über 100.000 gibt. Die ausgegebene Zahl kann also nicht stimmen!
Wie kann es zu solch einem Fehler kommen?
Da die Variable “Angestelltenzahl_2020” als character
interpretiert
wird, ändert sich auch die Bedeutung der Funktion max()
. Die Funkion
max()
gibt nun nicht mehr den Maximalwert zurück, sondern den
niedrigsten Platz in alphabetischer Sortierung. Nur wenn wenn die Werte
in der Tabelle auch als Zahlen (also numerisch/integer) von R
gelesen werden, gibt die Funktion max()
den Maximalwert der Spalte
zurück.
6.3.2. Variablenklasse ändern#
Hierfür überspeichern Sie die Daten der jeweiligen Spalte mit den exakt
selben Daten, nur das Sie durch den Befehl as.integer
die Klasse der
Variable ändern. Wenn Sie die Klasse in numerisch ändern wollen, würden
Sie as.numeric
verwenden.
Tabellendaten$Angestelltenzahl_2020 <- as.integer(Tabellendaten$Angestelltenzahl_2020)
Warning message:
“NAs introduced by coercion”
Überprüfen Sie gegebenenfalls erneut die Klasse:
class(Tabellendaten$Angestelltenzahl_2020)
Wenn Sie nun noch einmal die Beispielfunktion max()
heranziehen, dann
bekommen Sie jetzt durch neuer Klassenzugehörigkeit der Variable den
Maximalwert angezeigt:
max(Tabellendaten$Angestelltenzahl_2020, na.rm = TRUE)
Wichtig!
Überprüfen Sie immer die Art der Variablenklasse, welche R Ihren Daten zuweist und ändern Sie dies gegebenenfalls, um Fehler zu vermeiden.
6.3.3. Variablen hinzufügen#
Eine gute Kategorisierung Ihrer Daten ist notwendig, um effizient zu
filtern. Hierzu müssen Sie die Struktur der Daten nachvollziehen
können.
Um die einzelnen Ausprägung der Variable “Angestelltenverhaeltnis” zu
sichten, bietet Ihnen R den Befehl unique()
:
unique(Tabellendaten$Angestelltenverhaeltnis)
- 'Wissenschaftliches und kuenstlerisches Personal'
- ' Hauptberufl. wissenschaftl. u. kuenstler. Personal'
- ' Professoren'
- ' Dozenten und Assistenten'
- ' Wissenschaftliche und kuenstlerische Mitarbeiter'
- ' Lehrkraefte fuer besondere Aufgaben'
- ' Nebenberufl. wissenschaftl. u. kuenstler. Personal'
- ' Gastprofessoren, Emeriti'
- ' Lehrbeauftragte'
- ' Wissenschaftliche Hilfskraefte'
- 'Verwaltungs-, technisches und sonstiges Personal'
- ' Hauptberufl. Verwaltungs-, techn. u.sonst.Personal'
- ' Verwaltungspersonal'
- ' Bibliothekspersonal'
- ' Technisches Personal'
- ' Sonstiges Personal'
- ' Pflegepersonal'
- ' Arbeiter'
- ' Auszubildende'
- ' Praktikanten'
- ' Sonstiges Personal fuer Lehre und Forschung'
- ' Leitungs- und Verwaltungspersonal'
- ' Nebenberufl. Verwaltungs-, techn. u.sonst.Personal'
- ' Sonstige Hilfskraefte'
- ' Zeitweilig Beschaeftigte'
- 'Insgesamt'
Wie Sie erkennen können, ist die Variable “Angestelltenverhaeltnis” recht unübersichtlich, da sie verschiedene Unterkategorien enthält. Bei Betrachtung der einzelnen Positionen ist jedoch nicht erkennbar, zu welcher Überkategorie die Position gehört.
Bei genauerer Betrachtung der Tabelle fällt auf, dass es drei Ebenen gibt:
Ebene: “Wissenschaftliches und kuenstlerisches Personal” und “Verwaltungs-, technisches und sonstiges Personal”
Ebene: “Hauptberuflich” und “Nebenberuflich”
Ebene: Die einzelnen Positionen der Berufsbezeichnungen z.B. “Professoren”, “Dozenten und Assistenten”, etc.
Für eine übersichtlichere Struktur in der Tabelle kann für die ersten zwei Ebenen jeweils eine neue Variable erstellt werden. Hierdurch werden zwei neue Spalten zur Tabelle hinzugefügt und Sie können dann bei Betrachtung einer einzelnen Zeile alle wichtigen Informationen herauslesen, was derzeit nicht möglich ist.
Neue Variablen erstellen:
Da die Struktur es nicht erlaubt, die neuen Variablen durch Referenz auf
die bereits vorhandenen Variablen zu erzeugen, müssen die neuen
Variablen manuell strukturiert werden.
Erzeugen Sie hierfür zunächst neue Variablen und setzen Sie den Inhalt erst mal auf unbekannt (NA).
#1.Ebene: Neue Variable "Personalkategorie"
Tabellendaten$Personalkategorie <- c(NA)
#2.Ebene: Neue Variable "Art der Anstellung"
Tabellendaten$Art_der_Anstellung <- c(NA)
Der Spalteninhalt muss nun manuell eingetragen werden.
Achtung: Diese Weise ist leider recht fehleranfällig, ist jedoch durch
den Aufbau der Datei, ohne komplexere Funktionen zu benutzen, nicht
anders möglich.
Wichtig!
Wenn Sie Daten generieren, strukturieren Sie diese immer gut. Dies erleichtert Ihnen selbst, aber auch allen anderen, die Ihre Daten verwenden, das Arbeiten! Eine gute Struktur von Daten liefert der Tidy-Data Ansatz (s. Abschnitt Datenstruktur).
Einpflegen des Variableninhalts
#1.Ebene
Tabellendaten$Personalkategorie[76:78] <- "Insgesamt"
Tabellendaten$Personalkategorie[1:30] <- "Wissenschaftliches und künstlerisches Personal"
Tabellendaten$Personalkategorie[31:75] <- "Verwaltungs-, technisches und sonstiges Personal"
#2.Ebene
Tabellendaten$Art_der_Anstellung[c(1:3, 31:33, 76:78)] <- "Insgesamt"
Tabellendaten$Art_der_Anstellung[c(4:18,34:66)] <- "Hauptberuflich"
Tabellendaten$Art_der_Anstellung[c(19:30,67:75)] <- "Nebenberuflich"
Ergebnis ansehen:
head(Tabellendaten, n=78)
Angestelltenverhaeltnis | Geschlecht | Angestelltenzahl_2020 | Personalkategorie | Art_der_Anstellung | |
---|---|---|---|---|---|
<chr> | <chr> | <int> | <chr> | <chr> | |
1 | Wissenschaftliches und kuenstlerisches Personal | maennlich | 247720 | Wissenschaftliches und künstlerisches Personal | Insgesamt |
2 | Wissenschaftliches und kuenstlerisches Personal | weiblich | 167112 | Wissenschaftliches und künstlerisches Personal | Insgesamt |
3 | Wissenschaftliches und kuenstlerisches Personal | Insgesamt | 414832 | Wissenschaftliches und künstlerisches Personal | Insgesamt |
4 | Hauptberufl. wissenschaftl. u. kuenstler. Personal | maennlich | 159567 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
5 | Hauptberufl. wissenschaftl. u. kuenstler. Personal | weiblich | 109708 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
6 | Hauptberufl. wissenschaftl. u. kuenstler. Personal | Insgesamt | 269275 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
7 | Professoren | maennlich | 36344 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
8 | Professoren | weiblich | 12949 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
9 | Professoren | Insgesamt | 49293 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
10 | Dozenten und Assistenten | maennlich | 2182 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
11 | Dozenten und Assistenten | weiblich | 1546 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
12 | Dozenten und Assistenten | Insgesamt | 3728 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
13 | Wissenschaftliche und kuenstlerische Mitarbeiter | maennlich | 116004 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
14 | Wissenschaftliche und kuenstlerische Mitarbeiter | weiblich | 89383 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
15 | Wissenschaftliche und kuenstlerische Mitarbeiter | Insgesamt | 205387 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
16 | Lehrkraefte fuer besondere Aufgaben | maennlich | 5037 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
17 | Lehrkraefte fuer besondere Aufgaben | weiblich | 5830 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
18 | Lehrkraefte fuer besondere Aufgaben | Insgesamt | 10867 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
19 | Nebenberufl. wissenschaftl. u. kuenstler. Personal | maennlich | 88153 | Wissenschaftliches und künstlerisches Personal | Nebenberuflich |
20 | Nebenberufl. wissenschaftl. u. kuenstler. Personal | weiblich | 57404 | Wissenschaftliches und künstlerisches Personal | Nebenberuflich |
21 | Nebenberufl. wissenschaftl. u. kuenstler. Personal | Insgesamt | 145557 | Wissenschaftliches und künstlerisches Personal | Nebenberuflich |
22 | Gastprofessoren, Emeriti | maennlich | 1534 | Wissenschaftliches und künstlerisches Personal | Nebenberuflich |
23 | Gastprofessoren, Emeriti | weiblich | 259 | Wissenschaftliches und künstlerisches Personal | Nebenberuflich |
24 | Gastprofessoren, Emeriti | Insgesamt | 1793 | Wissenschaftliches und künstlerisches Personal | Nebenberuflich |
25 | Lehrbeauftragte | maennlich | 64492 | Wissenschaftliches und künstlerisches Personal | Nebenberuflich |
26 | Lehrbeauftragte | weiblich | 35238 | Wissenschaftliches und künstlerisches Personal | Nebenberuflich |
27 | Lehrbeauftragte | Insgesamt | 99730 | Wissenschaftliches und künstlerisches Personal | Nebenberuflich |
28 | Wissenschaftliche Hilfskraefte | maennlich | 22127 | Wissenschaftliches und künstlerisches Personal | Nebenberuflich |
29 | Wissenschaftliche Hilfskraefte | weiblich | 21907 | Wissenschaftliches und künstlerisches Personal | Nebenberuflich |
30 | Wissenschaftliche Hilfskraefte | Insgesamt | 44034 | Wissenschaftliches und künstlerisches Personal | Nebenberuflich |
⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ |
49 | Pflegepersonal | maennlich | 15427 | Verwaltungs-, technisches und sonstiges Personal | Hauptberuflich |
50 | Pflegepersonal | weiblich | 63731 | Verwaltungs-, technisches und sonstiges Personal | Hauptberuflich |
51 | Pflegepersonal | Insgesamt | 79158 | Verwaltungs-, technisches und sonstiges Personal | Hauptberuflich |
52 | Arbeiter | maennlich | NA | Verwaltungs-, technisches und sonstiges Personal | Hauptberuflich |
53 | Arbeiter | weiblich | NA | Verwaltungs-, technisches und sonstiges Personal | Hauptberuflich |
54 | Arbeiter | Insgesamt | NA | Verwaltungs-, technisches und sonstiges Personal | Hauptberuflich |
55 | Auszubildende | maennlich | 6284 | Verwaltungs-, technisches und sonstiges Personal | Hauptberuflich |
56 | Auszubildende | weiblich | 16137 | Verwaltungs-, technisches und sonstiges Personal | Hauptberuflich |
57 | Auszubildende | Insgesamt | 22421 | Verwaltungs-, technisches und sonstiges Personal | Hauptberuflich |
58 | Praktikanten | maennlich | 705 | Verwaltungs-, technisches und sonstiges Personal | Hauptberuflich |
59 | Praktikanten | weiblich | 1356 | Verwaltungs-, technisches und sonstiges Personal | Hauptberuflich |
60 | Praktikanten | Insgesamt | 2061 | Verwaltungs-, technisches und sonstiges Personal | Hauptberuflich |
61 | Sonstiges Personal fuer Lehre und Forschung | maennlich | NA | Verwaltungs-, technisches und sonstiges Personal | Hauptberuflich |
62 | Sonstiges Personal fuer Lehre und Forschung | weiblich | NA | Verwaltungs-, technisches und sonstiges Personal | Hauptberuflich |
63 | Sonstiges Personal fuer Lehre und Forschung | Insgesamt | NA | Verwaltungs-, technisches und sonstiges Personal | Hauptberuflich |
64 | Leitungs- und Verwaltungspersonal | maennlich | NA | Verwaltungs-, technisches und sonstiges Personal | Hauptberuflich |
65 | Leitungs- und Verwaltungspersonal | weiblich | NA | Verwaltungs-, technisches und sonstiges Personal | Hauptberuflich |
66 | Leitungs- und Verwaltungspersonal | Insgesamt | NA | Verwaltungs-, technisches und sonstiges Personal | Hauptberuflich |
67 | Nebenberufl. Verwaltungs-, techn. u.sonst.Personal | maennlich | 2073 | Verwaltungs-, technisches und sonstiges Personal | Nebenberuflich |
68 | Nebenberufl. Verwaltungs-, techn. u.sonst.Personal | weiblich | 3494 | Verwaltungs-, technisches und sonstiges Personal | Nebenberuflich |
69 | Nebenberufl. Verwaltungs-, techn. u.sonst.Personal | Insgesamt | 5567 | Verwaltungs-, technisches und sonstiges Personal | Nebenberuflich |
70 | Sonstige Hilfskraefte | maennlich | 2073 | Verwaltungs-, technisches und sonstiges Personal | Nebenberuflich |
71 | Sonstige Hilfskraefte | weiblich | 3494 | Verwaltungs-, technisches und sonstiges Personal | Nebenberuflich |
72 | Sonstige Hilfskraefte | Insgesamt | 5567 | Verwaltungs-, technisches und sonstiges Personal | Nebenberuflich |
73 | Zeitweilig Beschaeftigte | maennlich | NA | Verwaltungs-, technisches und sonstiges Personal | Nebenberuflich |
74 | Zeitweilig Beschaeftigte | weiblich | NA | Verwaltungs-, technisches und sonstiges Personal | Nebenberuflich |
75 | Zeitweilig Beschaeftigte | Insgesamt | NA | Verwaltungs-, technisches und sonstiges Personal | Nebenberuflich |
76 | Insgesamt | maennlich | 348040 | Insgesamt | Insgesamt |
77 | Insgesamt | weiblich | 411025 | Insgesamt | Insgesamt |
78 | Insgesamt | Insgesamt | 759065 | Insgesamt | Insgesamt |
6.3.4. Unterkategorisieren#
Eine Unterkategorisierung (auch Sub-Sampling gennant) bietet sich auch insbesondere für die Variable “Geschlecht” an.
unique(Tabellendaten$Geschlecht)
- 'maennlich'
- 'weiblich'
- 'Insgesamt'
Durch das Aufführen der Variablenausprägung "Insgesamt"
wird die
Tabelle recht unübersichtlich. Es empfiehlt sich das sub-samplen der
Tabelle nach den verschiedenen Geschlechtsausprägungen:
#Geschlecht
Tabelle_maennlich <- subset(Tabellendaten, Geschlecht == "maennlich")
Tabelle_weiblich <- subset(Tabellendaten, Geschlecht == "weiblich")
Tabelle_Insgesamt <- subset(Tabellendaten, Geschlecht == "Insgesamt")
#Ergbnis ansehen
head(Tabelle_Insgesamt)
Angestelltenverhaeltnis | Geschlecht | Angestelltenzahl_2020 | Personalkategorie | Art_der_Anstellung | |
---|---|---|---|---|---|
<chr> | <chr> | <int> | <chr> | <chr> | |
3 | Wissenschaftliches und kuenstlerisches Personal | Insgesamt | 414832 | Wissenschaftliches und künstlerisches Personal | Insgesamt |
6 | Hauptberufl. wissenschaftl. u. kuenstler. Personal | Insgesamt | 269275 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
9 | Professoren | Insgesamt | 49293 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
12 | Dozenten und Assistenten | Insgesamt | 3728 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
15 | Wissenschaftliche und kuenstlerische Mitarbeiter | Insgesamt | 205387 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
18 | Lehrkraefte fuer besondere Aufgaben | Insgesamt | 10867 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
Wenn Sie nun z.B. aus der Tabelle_Insgesamt die zweite Spalte entfernen möchten, da diese redundant ist, können Sie die Spalte aus dem Subsample entfernen:
Tabelle_Insgesamt <- subset(Tabelle_Insgesamt, select= c(-Geschlecht))
head(Tabelle_Insgesamt)
Angestelltenverhaeltnis | Angestelltenzahl_2020 | Personalkategorie | Art_der_Anstellung | |
---|---|---|---|---|
<chr> | <int> | <chr> | <chr> | |
3 | Wissenschaftliches und kuenstlerisches Personal | 414832 | Wissenschaftliches und künstlerisches Personal | Insgesamt |
6 | Hauptberufl. wissenschaftl. u. kuenstler. Personal | 269275 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
9 | Professoren | 49293 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
12 | Dozenten und Assistenten | 3728 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
15 | Wissenschaftliche und kuenstlerische Mitarbeiter | 205387 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
18 | Lehrkraefte fuer besondere Aufgaben | 10867 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
6.3.5. Tabellendaten filtern#
Alternativ zum subset
-Befehl kann mit dem Befehl filter
gearbeitet
werden.
Damit können Sie Ihre Tabelle filtern und sich gezielt Inhalte anzeigen lassen.
Hierzu können Sie verschiedene Operatoren und Funktionen nutzen:
Mathematische Operatoren:
==
(Ist gleich)!=
(Ist nicht gleich)<
(Kleiner als)<=
(Kleiner-Gleich)>
(Größer als)>=
(Größer-Gleich)
Beispiel:
filter(Tabelle_Insgesamt, Tabelle_Insgesamt$Angestelltenzahl_2020 <= 5000)
Angestelltenverhaeltnis | Angestelltenzahl_2020 | Personalkategorie | Art_der_Anstellung |
---|---|---|---|
<chr> | <int> | <chr> | <chr> |
Dozenten und Assistenten | 3728 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
Gastprofessoren, Emeriti | 1793 | Wissenschaftliches und künstlerisches Personal | Nebenberuflich |
Praktikanten | 2061 | Verwaltungs-, technisches und sonstiges Personal | Hauptberuflich |
Logische Operatoren:
!
(logisches NICHT)&
(logisches UND)|
(logisches ODER)
Beispiel:
filter(Tabellendaten, Tabellendaten$Personalkategorie == "Wissenschaftliches und künstlerisches Personal" & Tabellendaten$Geschlecht == "weiblich" )
Angestelltenverhaeltnis | Geschlecht | Angestelltenzahl_2020 | Personalkategorie | Art_der_Anstellung |
---|---|---|---|---|
<chr> | <chr> | <int> | <chr> | <chr> |
Wissenschaftliches und kuenstlerisches Personal | weiblich | 167112 | Wissenschaftliches und künstlerisches Personal | Insgesamt |
Hauptberufl. wissenschaftl. u. kuenstler. Personal | weiblich | 109708 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
Professoren | weiblich | 12949 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
Dozenten und Assistenten | weiblich | 1546 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
Wissenschaftliche und kuenstlerische Mitarbeiter | weiblich | 89383 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
Lehrkraefte fuer besondere Aufgaben | weiblich | 5830 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
Nebenberufl. wissenschaftl. u. kuenstler. Personal | weiblich | 57404 | Wissenschaftliches und künstlerisches Personal | Nebenberuflich |
Gastprofessoren, Emeriti | weiblich | 259 | Wissenschaftliches und künstlerisches Personal | Nebenberuflich |
Lehrbeauftragte | weiblich | 35238 | Wissenschaftliches und künstlerisches Personal | Nebenberuflich |
Wissenschaftliche Hilfskraefte | weiblich | 21907 | Wissenschaftliches und künstlerisches Personal | Nebenberuflich |
Verwenden von Funktionen:
Beispiel: Ausgabe des kleinsten Wertes mittels der min()
-Funktion
filter(Tabellendaten, Tabellendaten$Angestelltenzahl_2020 == min(Tabellendaten$Angestelltenzahl_2020, na.rm = TRUE))
Angestelltenverhaeltnis | Geschlecht | Angestelltenzahl_2020 | Personalkategorie | Art_der_Anstellung |
---|---|---|---|---|
<chr> | <chr> | <int> | <chr> | <chr> |
Gastprofessoren, Emeriti | weiblich | 259 | Wissenschaftliches und künstlerisches Personal | Nebenberuflich |
Mögliche Probleme?
Wenn mit der Variable Angestelltenverhaeltnis
gefiltert werden soll, gibt R folgenden Output:
#Beispiel: Filtern nach "Professoren"
filter(Tabellendaten, Tabellendaten$Angestelltenverhaeltnis == "Professoren")
Angestelltenverhaeltnis | Geschlecht | Angestelltenzahl_2020 | Personalkategorie | Art_der_Anstellung |
---|---|---|---|---|
<chr> | <chr> | <int> | <chr> | <chr> |
Wenn Sie jedoch in den Datensatz schauen, sehen Sie, dass Professoren unter Angestelltenverhaeltnis
mit aufgelistet werden.
Warum werden “Professoren” nicht gefunden?
Das Problem besteht darin, dass die Ausgangsdatei Leerzeichen vor dem Wort Professoren (und auch vor anderen Bezeichnungen von Angestelltenverhältnissen) enthält.
Mit dem Befehl trimws()
können Sie die vorgestellten Leerzeichen vor den Bezeichnungen entfernen:
Tabellendaten$Angestelltenverhaeltnis <- trimws(Tabellendaten$Angestelltenverhaeltnis)
Führen Sie nun erneut die Filtersuche durch und Sie erhalten das korrekte Ergebnis:
filter(Tabellendaten, Tabellendaten$Angestelltenverhaeltnis == "Professoren")
Angestelltenverhaeltnis | Geschlecht | Angestelltenzahl_2020 | Personalkategorie | Art_der_Anstellung |
---|---|---|---|---|
<chr> | <chr> | <int> | <chr> | <chr> |
Professoren | maennlich | 36344 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
Professoren | weiblich | 12949 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
Professoren | Insgesamt | 49293 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
6.3.6. Sortieren von Tabellendaten#
Sie können Tabellen mittels des order()
-Befehls nach belieben
sortieren.
Beispiel:
Tabelle_Insgesamt_Sortiert <- Tabelle_Insgesamt[order(Tabelle_Insgesamt$Angestelltenzahl_2020, decreasing = TRUE),]
head(Tabelle_Insgesamt_Sortiert)
Angestelltenverhaeltnis | Angestelltenzahl_2020 | Personalkategorie | Art_der_Anstellung | |
---|---|---|---|---|
<chr> | <int> | <chr> | <chr> | |
78 | Insgesamt | 759065 | Insgesamt | Insgesamt |
3 | Wissenschaftliches und kuenstlerisches Personal | 414832 | Wissenschaftliches und künstlerisches Personal | Insgesamt |
33 | Verwaltungs-, technisches und sonstiges Personal | 344233 | Verwaltungs-, technisches und sonstiges Personal | Insgesamt |
36 | Hauptberufl. Verwaltungs-, techn. u.sonst.Personal | 338666 | Verwaltungs-, technisches und sonstiges Personal | Hauptberuflich |
6 | Hauptberufl. wissenschaftl. u. kuenstler. Personal | 269275 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
15 | Wissenschaftliche und kuenstlerische Mitarbeiter | 205387 | Wissenschaftliches und künstlerisches Personal | Hauptberuflich |
Zur Kontrolle, finden Sie den kompletten Code der Übung hier:
#TidyVerse Package Installation
install.packages("tidyverse")
library(tidyverse)
#Daten einlesen
data_csv_clean <- read.csv2("Data/21341-0001_F_2020.csv", header = FALSE, encoding = "latin1")
#Ergebnisse ansehen
head(data_csv_clean)
#Umlaute entfernen
data_csv_clean$V1 <- str_replace_all(data_csv_clean$V1, c("ä" = "ae", "ö" = "oe", "ü" ="ue", "ß" ="ss"))
data_csv_clean$V2 <- str_replace_all(data_csv_clean$V2, c("ä" = "ae", "ö" = "oe", "ü" ="ue", "ß" ="ss"))
#Ausgewählte Ergebnisse ansehen
show(data_csv_clean[8:20,1:3])
#Tabelle unterteilen
Metadaten <- data_csv_clean[c(1:6, 87:88), 1]
Tabellendaten <- data_csv_clean[8:85, 1:3]
#Spaltenüberschriften setzen
colnames(Tabellendaten) <- c("Angestelltenverhaeltnis", "Geschlecht", "Angestelltenzahl_2020")
#Nummerierung neu setzen
row.names(Tabellendaten) <- 1:78
#Ergebnis ansehen
head(Tabellendaten)
#Variablenklassen bestimmen
class(Tabellendaten$Angestelltenverhaeltnis) #sollte als character oder factor gelesen werden
class(Tabellendaten$Geschlecht) #sollte als character oder factor gelesen werden
class(Tabellendaten$Angestelltenzahl_2020) #sollte als numerisch oder integer gelesen werden
#Variablenklassen ändern
Tabellendaten$Angestelltenzahl_2020 <- as.integer(Tabellendaten$Angestelltenzahl_2020)
#Maximalwert anzeigen lassen
max(Tabellendaten$Angestelltenzahl_2020, na.rm = TRUE)
#Variablen sichten
unique(Tabellendaten$Angestelltenverhaeltnis)
#Neue Variablen erstellen
#1.Ebene: Neue Variable "Personalkategorie"
Tabellendaten$Personalkategorie <- c(NA)
#2.Ebene: Neue Variable "Art der Anstellung"
Tabellendaten$Art_der_Anstellung <- c(NA)
#Einpflegen des Variableninhalts
#1.Ebene
Tabellendaten$Personalkategorie[76:78] <- "Insgesamt"
Tabellendaten$Personalkategorie[1:30] <- "Wissenschaftliches und künstlerisches Personal"
Tabellendaten$Personalkategorie[31:75] <- "Verwaltungs-, technisches und sonstiges Personal"
#2.Ebene
Tabellendaten$Art_der_Anstellung[c(1:3, 31:33, 76:78)] <- "Insgesamt"
Tabellendaten$Art_der_Anstellung[c(4:18,34:66)] <- "Hauptberuflich"
Tabellendaten$Art_der_Anstellung[c(19:30,67:75)] <- "Nebenberuflich"
#Unterkategorisieren
#Geschlecht
Tabelle_maennlich <- subset(Tabellendaten, Geschlecht == "maennlich")
Tabelle_weiblich <- subset(Tabellendaten, Geschlecht == "weiblich")
Tabelle_Insgesamt <- subset(Tabellendaten, Geschlecht == "Insgesamt")
#Redundante Tabelle entfernen
Tabelle_Insgesamt <- subset(Tabelle_Insgesamt, select= c(-Geschlecht))
#Tabellendaten filtern
#Nach Angestelltenzahl unter 5000 filtern
filter(Tabelle_Insgesamt, Tabelle_Insgesamt$Angestelltenzahl_2020 <= 5000)
#Nach weiblichen Wiss.& Künstl.Personal filtern
filter(Tabellendaten, Tabellendaten$Personalkategorie == "Wissenschaftliches und künstlerisches Personal" & Tabellendaten$Geschlecht == "weiblich" )
#Filtern nach niedrigstem Wert
filter(Tabellendaten, Tabellendaten$Angestelltenzahl_2020 == min(Tabellendaten$Angestelltenzahl_2020, na.rm = TRUE))
#Fehlerbehebung Leerzeichen entfernen
Tabellendaten$Angestelltenverhaeltnis <- trimws(Tabellendaten$Angestelltenverhaeltnis)
#Filter nach 'Professoren'
filter(Tabellendaten, Tabellendaten$Angestelltenverhaeltnis == "Professoren")
#Sortieren von Tabellendaten
Tabelle_Insgesamt_Sortiert <- Tabelle_Insgesamt[order(Tabelle_Insgesamt$Angestelltenzahl_2020, decreasing = TRUE),]
#Ergebnis ansehen
head(Tabelle_Insgesamt_Sortiert)