data
dataframe
dataframe
Data-Frames
# DataFrames ############ # ist Liste, deren Komponenten Vectoren, # factoren, numerische Matrizen Listen oder andere dataframes sind # Enspricht am ehesten Datenstrukturen in anderen Statistikpaketen # Spalten können z. B. Vectoren mit Namen entsprechen # und können unter diesen Namen angesprochen werden # data.frame generieren 'zu Fuß' data <-data.frame( nr=c(1,2,3,4,5), geschl=c('w','m','m','w','w'), spass=c(10, 8, 7, 9, 3)) # Denselben data.frame generieren aus Einzelvectoren nr=c(1,2,3,4,5), geschl <- c('w','m','m','w','w') spass <- c(10, 8, 7, 9, 3) data <- data.frame(nr, geschl, spass) # Datenspalte anhängen data['neue.spalte'] <- c(101,102,103,104,105) # Spaltenname darf noch nicht existieren # Spaltennamen ausgeben names(data) # prima bei sehr großen Datenobjekten um z. B. Position einer Spalte festzustellen # Dataframes können aus externen Dateien eingelesen werden # die z. B. mit Spreadsheets (Excel, etc.) erstellt wurden # erste Zeile kann die Spaltennamen enthalten # die werden dann in Vectoren diesen Namens konvertiert # Datenfiles # read.table und read.delim erzeugen data.frames # sind Textfiles, default: Tab-delimited # bequemstes Einlesen: Tab als Delimiter, leere Zelle als missing (NA) my.data <- read.delim("http://www.psych.uni-goettingen.de/r/files/and_then.dat") # Editieren von Dataframes fix(dataframe.name) # öffnet dataframe und stellt es spreadsheetartig dar und ermöglicht editieren # wenn nicht direkt beim fix-Befehl ein neuer (oder derselbe) Name zugewiesen wird, # gehen die Änderungen verloren my.data <- read.delim("http://www.psych.uni-goettingen.de/r/files/and_then.dat") my.data <- fix(my.data) # my.data wird überschrieben my.data.new <- fix(my.data) # my.data bleibt unverändert # Dataframes können aktiviert werden # d. h. man kann auf die Komponenten (Datenvectoren) über deren Namen zugreifen # ohne die Schreibweise dataframename$spaltenname data <-data.frame( nr=c(1,2,3,4,5), geschl=c('w','m','m','w','w'), spass=c(10, 8, 7, 9, 3)) spass # ergibt Error attach(data) # legt 'data' in den 'Suchpfad' geschl # zeigt Vector 'geschl' des dataframe 'data' spass # zeigt Vector 'spass' des dataframe 'data' detach(data) # nimmt 'data' aus dem 'Suchpfad' spass # ergibt Error data$spass # zeigt Vector 'spass' des dataframe 'data' # Löschen aus data.frame data <-data.frame( nr=c(1,2,3,4,5), muell = c(1,1,1,1,1), geschl=c('w','m','m','w','w'), spass=c(10, 8, 7, 9, 3)) data # mit Muell Spalte data <- data.frame(nr = data[,1], data[,3:4]) data # jetzt ohne Muell-Spalte # vp 3 löschen data <- data[data$nr != 3,] data # data ohne vp 3 # invertieren: Columns werden zu rows und umgekehrt data # original t(data) # invertiert # einen Faktor in Abhängigkeit von einer anderen Spalte (Variable) generieren # einlesen my.data <- read.delim("http://www.psych.uni-goettingen.de/r/files/data_befinden_gewicht.txt") # spalte gruppe anhängen, default 0 my.data['gruppe'] <- 0 my.data$gruppe[my.data$gew > 100] = 2 # gewicht größer 100: Gruppe = 2 my.data$gruppe[my.data$gew <= 100] = 1 # gewicht kleiner gleich 100: Gruppe = 1 my.data$gruppe <- factor(my.data$gruppe) # und nun zum Faktor deklarieren und die Spalte überschreiben #? sortieren, umsortieren # Data Frame in Datei wegschreiben (tab-delimited) write.table(my.data, "", sep="\t") # wenn die String-Variablen und die Variablennamen in Quotes ("...") stören: write.table(my.data, "", sep="\t", quote=F) # wenn die Fallnummern stören bzw. das Verrutschen der Variablennamen(Spaltennamen): write.table(my.data, "", sep="\t", quote=F, row.names=F)
# sortieren, umsortieren von data.frame data <-data.frame( nr=c(1,2,3,4,5,6), muell = c(1,2,5,9,10,1), geschl=c('w','m','m','w','w','m'), spass=c(10, 8, 7, 9, 3, 9)) # sortieren nach Spalte data$spass data.sortet <- data[order(data$spass),] # und zeigen data data.sortet # sortieren nach zwei Spalten: data$spass und sekundär nach data$muell data.sortet <- data[order(data$spass, data$muell),] und zeigen data.sortet
slicing
slicing
Slicing: Zugriff auf Teile von Datenobjekten
bei Vektoren:
# zwei Datenvektoren: sex <- c(1,2,2,1,1,1,2,2,2,1,2,2,1,1,1,2,1) age <- c(15, 17, 22, 32, 12, 18, 24, 34, 23, 22, 29, 15, 17, 20, 21, 23, 19) # die ersten 5 Alterswerte: age[1:5] # die Werte 2, 5, 7-10 des Vektors age[c(2, 5, 7:10)] # Bedingter Zugriff (Filter) # die Werte unter 20 age[age < 20] # Zugriff kann auch erfolgen über anderen Vektor und Bedingung hieraus (Filter aufgrund anderer Daten) # alle Werte von age für sex = 1 age[sex == 1] # auch kombinierte Bedingungen sind möglich # alle Werte von age > 10 und sex = 2 age[sex == 2 & age > 10]
Slices bei Dataframes
Zugriff auf Spalten
# Beispiel data.frame generieren data <-data.frame( nr=c(1,2,3,4,5), geschl=c('w','m','m','w','w'), spass=c(10, 8, 7, 9, 3)) # Zugriff auf einzelne Spalten # Über den Spaltennamen # Name data.frame, ein $-Zeichen, Name der Spalte data$geschl # oder data['geschl'] # oder data[,1]
Teilmatrizen, Teil-Dataframes
in der Slice-Klammer mit Komma getrennt Zeilenangabe, Spaltenangabe '[Zeilen, Spalten]'
fehlt eine der beiden Angaben, gilt es für alle
data <-data.frame( nr=c(1,2,3,4,5), geschl=c('w','m','m','w','w'), spass=c(10, 8, 7, 9, 3)) # erste Zeile (Vp 1) zweite Variable (Geschlecht) ausgeben: data[1,2] # erste Zeile/Vp ausgeben, alle Variablen data[1,] # das geht auch mit dem bedingten Zugriff # alle Frauen data[data$geschl == 'w',] # alle Frauen mit Spass < 10 data[data$geschl == 'w' & data$spass < 10,]
datafiles
datafiles
Input-/Outputmöglichkeiten in R
Data Frames
Data-Frames haben wegen ihrer Bedeutung zum Datenaustausch mit anderen Programmen eine hohe Wichtigkeit und eigene Befehle.
Einlesen eines Datenobjektes 'my.data' aus einer externen Datei im tab-delimited Format.
# Einlesen einer Datei 'and_then.dat' von einem Laufwerk p: my.data <- read.delim("p:/and_then.dat") # Einlesen einer Datei irgendwo im Web über eine URL my.data <- read.delim("http://www.psych.uni-goettingen.de/r/files/and_then.dat")
Export bzw. wegschreiben eines Datenobjektes 'my.data':
# Data Frame in Datei wegschreiben (default settings) write.table(my.data, "p:/my_data.dat") # Data Frame in Datei wegschreiben (tab-delimited) write.table(my.data, "p:/my_data.dat", sep="\t") # wenn die String-Variablen und die Variablennamen in Quotes ("...") stören: write.table(my.data, "p:/my_data.dat", sep="\t", quote=F) # wenn die Fallnummern stören bzw. das Verrutschen der Variablennamen(Spaltennamen): write.table(my.data, "p:/my_data.dat", sep="\t", quote=F, row.names=F)
Spreadsheet-Dateien (Excel, Calc, ...)
Spreadsheet-Dateien am besten exportieren und dann mit read.table() oder read.csv() einlesen.
Der Export aus R für Spreadsheet-Dateien geht mit write.table() bzw. write.csv().