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