# '0.8 Data-Frames selber aufbauen und erzeugen' # 10 Etikettierungen, 5 /i/, 5 /o/ v.l = c("i", "i", "i", "i", "i", "o", "o", "o", "o", "o") # oder v.l = c(rep("i", 5), rep("o", 5)) # oder v.l = rep(c("i","o"),each=5) f1 = c(240, 220, 250, 210, 280, 520, 510, 605, 670, 613) vok.df = data.frame(f1, factor(v.l)) # mit anderen Namen vok.df = data.frame(F1 = f1, V = v.l) class(vok.df) summary(vok.df) # Data-Frame ablegen und wieder einlesen write.table(vok.df, file.path(pfad, "vok.txt"), quote=F) read.table(file.path(pfad, "vok.txt")) summary(vok.df) class(vok.df$V) class(vok.df$F1) # Hier noch eine sehr nützliche Funktion: with() ?with #z.B.: with(vok.df,F1) # = vok.df$F1 with(vok.df,table(V)) # = (fast, zumindest...) table(vok.df$V) # Zum Schluss: logische Vektoren # mit "==" kann man fragen, ob zwei Dinge identisch sind; falls ja, wird TRUE ausgegeben # das "==" ist also ganz was anderes als "=" (Zuweisung; assign) x = 0 y = 1 # x und y sind mit sich selbst natürlich identisch x == x y == y x == y x == 0 x == 1 z = 0 x == z # Das kann man zur Auswahl anwenden: vok.df$V #[1] i i i i i o o o o o #Levels: i o vok.df$V == "i" #[1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE # oder with(vok.df,V == "i") #[1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE # Wenn man vok.df nur auf die Werte aus "i"-Vokalen beschränken will: vok.df[vok.df$V == "i",] # oder vok.df[with(vok.df,V == "i"),] # logischen UND "&" # nur den "i"-Vokal mit F1 == 240 vok.df$V == "i" & vok.df$F1 == 240 # = with(vok.df,V =="i" & F1 == 240) # Wenn sich Ihnen jetzt noch nicht der Vorteil von with() erschließen sollte: # In späteren Sitzungen wird deutlicher werden, weshalb with() so praktisch ist; # vielleicht aber schon in a1.R (diese Sitzung) # logischen UND "&" # nur den "i"-Vokal mit F1 == 240 vok.df$V == "i" & vok.df$F1 == 240 # = with(vok.df,V =="i" & F1 == 240) #Nun dies in den data.frame stecken, um diesen zu filtern: vok.df[vok.df$V == "i" & vok.df$F1 == 240,] #oder vok.df[with(vok.df,V =="i" & F1 == 240),] #Die library(dplyr) macht das viel, viel einfacher: install.packages("dplyr") library(dplyr) #... und zwar mit dem filter()-Befehl: filter(vok.df,V=="i" & F1==240) #... z.B. filter(ai.df,F1==1005) #filter() ist eines der sogenannten "Verben" in dplyr. Es gibt nur eine begrenzte Anzahl: #filter(), arrange(), select(), rename(), mutate(),transmute(),summarise(),sample_n(),sample_fraq() # Heute besprechen wir nur das sehr nützliche "Verb" filter(), sowie select(): #select() greift auf Spalten zu select(ai.df,1) select(ai.df,F1) #das Gegenteil, also der Rest des data.frames select(ai.df,-F1) #Gibt es auch einen Befehl, um spezifische Zeilen anzeigen zu lassen? #Natürlich! Aber: #Der slice()-Befehl wird nicht zu den Basisverben von dplyr gerechnet. #Dieser Befehl gibt die Zeile(n) aus, die man angibt: slice(ai.df,5:7) #Wie man sieht: das Ausgabeformat ist kein data.frame mehr, sondern ein sogenanntes "tibble". # Doch dazu später mehr...