Der Umgang mit Daten ist in R sehr flexibel im Vergleich zu anderen Statistikpaketen. Daten sind Objekte. Mehrere Datenobjekte, auch verschiedener Art sind parallel benutzbar. Daten können im Programmcode erzeugt und sofort verwendet werden.
Daten können 'on the fly' generiert werden.
Daten können das Ergebnis von Berechnungen sein, die direkt weiter verwendet werden können.
Der in vielen Statistikpaketen üblichen Datenmatrix entspricht in R der DataFrame. Ein DataFrame ist eine zweidimensionale Tabelle. Nach den üblichen Konventionen entsprechen die Zeilen den Beobachtungen (Versuchspersonen) und die Spalten den Variablen. Die Spalten haben Namen. Über diese Namen kann man die Spalten ansprechen. In R kann man sehr flexibel auf Teile der Datenmatrix zugreifen.
Proprietäres Datenformat von R, das mit der Endung .RData abgelegt wird. Enthält alle Datensätze einer R-Sitzung inklusive Ergebnisobjekte von Berechnungen wie auch Definitionen.
Zum Datenaustausch bieten sich aus Kompatibilitätsgründen mit anderen Statistikprogrammen in Dateien gespeicherte Dataframes an. Konvention (in dieser Veranstaltung): Dataframe als Textdatei, Tab-delimited (Tabulatorzeichen trennen auf einer Zeile die Daten (Variablenwerte oder Variablennamen in der ersten Zeile) voneinander), Punkte als Dezimaltrenner, Codierung UTF-8.
Häufig externe Datenquellen.
Eingabe, z. B. bei papiergebundenen Fragebogen
R-Commander
Datenmanagement | Importiere Daten
Syntax
Mit read.table()
ist der Einlesebefehl für tabellenartige Daten aus externen Dateien.
Es gibt viele Parameter, die einen sehr flexiblen Umgang mit den einzulesenden Dateien ermöglichen.
Hinter einigen Befehle zum Einlesen von Daten verstecken sich read.table()
Aufrufe.
Beispielsweise liest read.delim()
Textdaten ein, bei denen die Variablennamen in der ersten Zeile stehen und in denen das Tabulatorzeichen als Trennzeichen verwendet wird.
Ein weiteres, gängiges Textformat ist das von Excel favorisierte 'csv'-Format,
das mit read.csv()
gelesen werden kann.
Für das Dezimaltrennzeichen ',' als Voreinstellung gibt es für die beiden obigen Einlese-Befehle die Varianten read.delim2()
bzw. read.csv2
.
R kann Dateien direkt aus dem Internet abholen.
Beispiel: Daten über Größe, Gewicht und Intensität des Attraktivitätsvergleichs Näheres zu Beispiel unter transformation
# read data frame from url with defaults: tab delimited, names in header,
# decimal separator '.' this is the most transparent way to read and share
# data with others
bmi <- read.delim("http://r.psych.bio.uni-goettingen.de/mv/data/virt/v_bmi.txt")
# in countries with ',' as decimal separator there is a version that
# defaults to sep=','
bmi_comma <- read.delim2("http://r.psych.bio.uni-goettingen.de/mv/data/virt/v_bmi_comma.txt")
# get the first 5 lines to control
bmi[1:5, ]
## nr name height weight grade c_phys_app c_good_way c_dress c_bad_way
## 1 1 Meier 180 60 2.02 2 1 2 4
## 2 2 Müller 176 54 1.00 3 4 3 1
## 3 3 Strauß 180 110 2.03 5 5 5 1
## 4 4 Übeling 182 52 1.00 4 5 4 2
## 5 5 Ärger 160 62 1.00 3 2 2 4
## c_figure
## 1 1
## 2 5
## 3 5
## 4 3
## 5 1
plot(bmi$height, bmi$weight)
Am besten funktioniert das, wenn das Arbeitsverzeichnis korrekt eingestellt ist und die Datendateien im aktuellen Arbeitsverzeichnis liegen.
Arbeitsverzeichnis erfragen /Users/pzezula/lehre/lehre_ss_2014/units/io mit getwd()
(get working directory).
Arbeitsverzeichnis setzen mit setwd()
(set working directory).
Pfade unter Unix und Mac-OS: Die einzelnen Pfad-Komponenten werden durch '/' voneinander getrennt.
Nach dem Anmelden am System befindet man sich normalerweise in seinem persönlichen Verzeichnis.
Angenommen, der aktuelle Benutzername ist im Folgenden 'psycho'.
Dort liegt auch das voreingestellte R-Arbeitsverzeichnis.
Bei Linux findet sich das normalerweise unter /home/psycho
.
Unter Mac OS-X ist das /Users/psycho
Unter Windows ist das der sog. Benutzerordner auf dem Systemlaufwerk, meist C:
.
Bei Windows 7 wäre das dann auf vielen Systemen C:\Users\psycho
.
Im GöNet gelten für die studentischen Benutzer andere Konventionen.
Bei Pfadangaben in R wird immer der '/' als Trenner zwischen den Pfadkomponenten genutzt, also auch unter Windows.
Eine R-Pfadangabe zum Setzen des Arbeitsverzeichnisses für das Windows-Verzeichnis C:\Users\psycho\Desktop
würde beispielsweise unter Windows gesetzt mit setwd("C:/Users/psycho/Desktop")
Den aktuellen D
Vergleiche die Ausführungen unter basics und dort zu Pfadangaben und Arbeitsverzeichnis.
Angenommen, ein Benutzer hat die Datei v_bmi.txt, die oben erwähnt wurde, lokal in seinem Benutzerverzeichnis auf dem Desktop in einem Verzeichnis 'mv' gespeichert.
Betriebssystemunabhängiger Zugriff
# get users home directory and use it to set working directory to directory
# 'mv' on local desktop
filename <- file.path("~", "Desktop/mv", "v_bmi.txt")
read.delim(filename, fileEncoding = "UTF-8")
## nr name height weight grade c_phys_app c_good_way c_dress c_bad_way
## 1 1 Meier 180 60 2.02 2 1 2 4
## 2 2 Müller 176 54 1.00 3 4 3 1
## 3 3 Strauß 180 110 2.03 5 5 5 1
## 4 4 Übeling 182 52 1.00 4 5 4 2
## 5 5 Ärger 160 62 1.00 3 2 2 4
## 6 6 Östro 156 41 1.00 3 4 3 3
## 7 7 Valentin 165 71 2.47 4 3 4 2
## 8 8 Marquéz 160 70 2.37 4 4 4 2
## 9 9 Lully 159 44 2.26 4 3 3 2
## 10 10 Lumière 189 60 1.21 5 4 5 1
## 11 11 Bâtist 158 45 1.27 2 2 2 4
## 12 12 Русский 192 130 2.97 4 4 5 1
## 13 13 Berking 187 91 1.87 3 4 3 2
## 14 14 Møllar 193 86 1.62 2 2 1 5
## 15 15 Abdullah 173 56 1.00 1 2 1 5
## 16 16 Grimm 165 47 2.06 3 2 3 4
## 17 17 Guevarra 167 52 1.00 2 1 1 5
## 18 18 Panik 175 53 1.00 4 3 3 2
## 19 19 Ütülümek 180 90 1.00 3 4 4 2
## 20 20 Chorvátč 177 80 3.24 4 3 5 1
## 21 21 článku 179 90 1.00 3 5 4 2
## 22 22 Eiland 182 100 1.60 5 5 5 1
## 23 23 Kromer 178 60 1.60 1 1 1 5
## 24 24 Brauer 181 75 1.30 2 1 3 5
## 25 25 Büstisch 185 80 1.62 1 2 1 4
## 26 26 Тыва дыл 180 54 2.48 4 5 5 1
## 27 27 Compu 184 58 1.00 3 4 3 2
## 28 28 Messer 179 57 1.00 3 3 4 1
## 29 29 Miller 183 53 1.00 5 5 4 1
## 30 30 Terminal 162 54 2.15 2 1 1 4
## c_figure
## 1 1
## 2 5
## 3 5
## 4 3
## 5 1
## 6 4
## 7 3
## 8 4
## 9 4
## 10 4
## 11 2
## 12 3
## 13 5
## 14 1
## 15 2
## 16 1
## 17 3
## 18 4
## 19 3
## 20 4
## 21 4
## 22 4
## 23 1
## 24 2
## 25 2
## 26 5
## 27 3
## 28 5
## 29 5
## 30 1
Das Arbeitsverzeichnis soll auf dieses Verzeichnis gesetzt werden. Die Datei soll in R eingelesen werden.
# get users home directory and use it to set working directory to directory
# 'mv' on local desktop
setw
## Error: Objekt 'setw' nicht gefunden
s1 <- "nie"
s2 <- "mals"
paste(s1, s2, sep = "-")
## [1] "nie-mals"
Gute Editoren machen beim Öffnen von Textdateien meist ein 'best guess', d. h. sie versuchen über das Auftreten von bestimmten Byte-Folgen und und -Nummern, deren relative Auftretenshäufigkeiten etc herauszufinden, welches Encoding vermutlich beim erstellen der Textdatei verwendet wurde. Häufig bieten sie das Wiedereinlesen einer Datei unter Verwendung eines bestimmten Encodings an. Außerdem bieten sie häufig Möglichkeiten, Textfiles in einem bestimmten Encoding-Format abzuspeichern.
Gute Editoren bieten flexible und mächtige Such- und Ersetzfunktionen. Solche Operationen können oft auf den aktuell markierten Teil eines Textes eingeschränkt werden. Einbezug von Sonderzeichen über Escape-Sequenzen.
Das Encoding kann beim Einlesen in R über den Parameter “fileEncoding” festgelegt werden. Hierdurch erfolgt eine automatische Konvertierung der Daten. Eine Auswahl möglicher Werte hierbei:
“UTF-8” “ISO-8859-1” (latin-1) “MACROMAN” (Mac OS)
Eine Liste der unterstützten Encodings findet sich u. a. in R-Studio unter File | reopen with encoding
oder in R mit dem Kommando iconvlist()
# read data frame from url with defaults tab delimited, names in header,
# decimal separator '.' convert coding on the fly
stud <- read.delim("http://r.psych.bio.uni-goettingen.de/mv/data/div/stud_utf8.txt",
fileEncoding = "UTF-8")
# get the first 5 lines to control
stud[1:5, ]
## no height shoe_size weight gender birth_month birth_year
## 1 1 177 43.0 75 1 3 88
## 2 2 190 45.0 87 2 6 83
## 3 3 162 37.0 49 1 1 89
## 4 4 179 42.5 80 2 6 85
## 5 5 178 39.0 52 1 7 85
## statistics_grade abitur math_intense academic_background
## 1 3.0 1.6 0 1
## 2 4.0 3.7 0 1
## 3 3.2 2.1 0 0
## 4 3.0 2.0 1 1
## 5 2.7 2.2 0 1
## computer_knowledge string
## 1 7 grün
## 2 5 groß
## 3 4 öde
## 4 5 süß
## 5 2 ärgerlich
plot(stud$height, stud$weight)
stud <- read.delim("http://r.psych.bio.uni-goettingen.de/mv/data/div/stud_latin1.txt",
fileEncoding = "LATIN1")
# sometimes there are different names for the same encoding
stud <- read.delim("http://r.psych.bio.uni-goettingen.de/mv/data/div/stud_latin1.txt",
fileEncoding = "ISO-8859-1")
stud <- read.delim("http://r.psych.bio.uni-goettingen.de/mv/data/div/stud_macroman.txt",
fileEncoding = "MACROMAN")
# get the first 5 lines to control
stud[1:5, ]
## no height shoe_size weight gender birth_month birth_year
## 1 1 177 43.0 75 1 3 88
## 2 2 190 45.0 87 2 6 83
## 3 3 162 37.0 49 1 1 89
## 4 4 179 42.5 80 2 6 85
## 5 5 178 39.0 52 1 7 85
## statistics_grade abitur math_intense academic_background
## 1 3.0 1.6 0 1
## 2 4.0 3.7 0 1
## 3 3.2 2.1 0 0
## 4 3.0 2.0 1 1
## 5 2.7 2.2 0 1
## computer_knowledge string
## 1 7 grün
## 2 5 groß
## 3 4 öde
## 4 5 süß
## 5 2 ärgerlich
plot(stud$height, stud$weight)
R kann neben seinem eigenen Format (Rdata) und Textdaten verschiedene proprietäre Fremdformate einlesen. In Auswertungen gängige Formate sind beispielsweise Excel, SPSS, Stata usw.
SPSS-Dateien
Das portable Format wird empfohlen. Es gibt limitierte Unterstützung des 'sav'-Formats.
Mit Library foreign
# if not already done: install.packages('Hmisc')
library(foreign)
# ?read.spss
stud <- read.spss("http://r.psych.bio.uni-goettingen.de/mv/data/div/stud.sav",
to.data.frame = T)
## Warning:
## /var/folders/48/0jqjz26j77z07cdw__8t36rc0000gn/T//RtmpYdUrYA/filec3663f6bf483:
## Unrecognized record type 7, subtype 18 encountered in system file
## re-encoding from UTF-8
Etwas mächtiger mit Library memisc, aber ohne URL als Input-Möglichkeit.
# if not done already: install.packages('memisc')
library("memisc")
## Loading required package: lattice
## Loading required package: MASS
## Loading required namespace: car
##
## Attaching package: 'memisc'
##
## Die folgenden Objekte sind maskiert from 'package:stats':
##
## contr.sum, contr.treatment, contrasts
##
## Das folgende Objekt ist maskiert from 'package:base':
##
## as.array
# spss.system.file doesn't seem to open urls so you must refer to a locally
# saved file example for Mac OS-X ~ refers to the current users home
# directory; current users desktop can be referred to as '~/Desktop/'
# current users download directory can be referred to as '~/Downloads/'
stud <- as.data.set(spss.system.file("~/Desktop/stud.sav"))
# example for Windows Windows path names in R are separated by '/' not by
# '\'
stud <- as.data.set(spss.system.file("/Users/pzezula/lehre/lehre_ss_2014/data/div/stud.sav"))
QuickR über Fremdformate
Im R-Commander kann man einige Fremdformate, hier z. B. SPSS, über
Datenmanagement | Importiere Daten | aus SPSS Datendatei
einlesen.
Die hier relevanten Datentypen in Dataframes sind
numeric integer string factor
Datentyp kontrollieren und ggf. korrigieren. Das gilt insbesondere für Gruppierungsvariablen, die in R vom Typ factor sein müssen, um richtig behandelt zu werden.
# read stud data
stud <- read.delim("http://r.psych.bio.uni-goettingen.de/mv/data/div/stud_utf8.txt",
fileEncoding = "UTF-8")
# stud is data.frame
class(stud)
## [1] "data.frame"
# check type of columns of stud
lapply(stud, class)
## $no
## [1] "integer"
##
## $height
## [1] "integer"
##
## $shoe_size
## [1] "numeric"
##
## $weight
## [1] "numeric"
##
## $gender
## [1] "integer"
##
## $birth_month
## [1] "integer"
##
## $birth_year
## [1] "integer"
##
## $statistics_grade
## [1] "numeric"
##
## $abitur
## [1] "numeric"
##
## $math_intense
## [1] "integer"
##
## $academic_background
## [1] "integer"
##
## $computer_knowledge
## [1] "integer"
##
## $string
## [1] "factor"
# gender should be a grouping variable, although coded with integers
class(stud$gender)
## [1] "integer"
# convert it, old column overwritten
stud$gender_f <- factor(stud$gender, levels = c(1, 2), labels = c("f", "m"))
Mehr zu Datenaufbereitung unter [http://r.psych.bio.uni-goettingen.de/mv/units/data_transformation/data_transformation.Rmd]
R-Commander
Syntax
Beispiel
# write to a file in current directory dataframe 'stud' must exist
write.table(stud, "stud_example.txt", sep = "\t", row.names = F, quote = F)
Export bzw. wegschreiben eines Datenobjektes 'my.data':
# write dataframe, default settings
write.table(my.data, "p:/my_data.dat")
## Error: Objekt 'my.data' nicht gefunden
# write dataframe, tab-delimited
write.table(my.data, "p:/my_data.dat", sep = "\t")
## Error: Objekt 'my.data' nicht gefunden
# if you don't like the quoted strings and variable names:
write.table(my.data, "p:/my_data.dat", sep = "\t", quote = F)
## Error: Objekt 'my.data' nicht gefunden
# if you don't like automatically generated line or case numbers
write.table(my.data, "p:/my_data.dat", sep = "\t", quote = F, row.names = F)
## Error: Objekt 'my.data' nicht gefunden
Der Export aus R für Spreadsheet-Dateien geht mit write.table() bzw. write.csv().
*.R *.Rdata *.Rmd