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