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