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,]

subslice

subslicecontentpage

deutsche Version: SubSliceContentPage

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

slicing

subslice

subslicecontentpage

English version: SubSliceContentPage