> patienten<-data.frame( c(28,61,79,54,na,48), c(2,2,3,2,1,1), c("pillen","pillen","massage","gymnastik","massage","gymnastik"),



Ähnliche Dokumente
Die Invaliden-Versicherung ändert sich

Zeichen bei Zahlen entschlüsseln

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Ein + vor dem Ordnernamen zeigt an, dass der Ordner weitere Unterordner enthält. Diese lassen sich mit einem Klick (linke Maustaste) anzeigen.

MdtTax Programm. Programm Dokumentation. Datenbank Schnittstelle. Das Hauptmenü. Die Bedienung des Programms geht über das Hauptmenü.

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Basis und Dimension. Als nächstes wollen wir die wichtigen Begriffe Erzeugendensystem und Basis eines Vektorraums definieren.

Primzahlen und RSA-Verschlüsselung

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Wichtige Information zur Verwendung von CS-TING Version 9 für Microsoft Word 2000 (und höher)

Einfaches Datenmanagement in R

Seite 1. Datum einfügen

Zur drittletzten Zeile scrollen

Dazu stellen Sie den Cursor in die Zeile, aus der eine Überschrift werden soll, und klicken auf die gewünschte Überschrift.

Kurzanleitung. Toolbox. T_xls_Import

ESRlight Datenexport aus E-List & Import in ESRlight. Datum: 19. Februar 2010 Industriestrasse 25

Was meinen die Leute eigentlich mit: Grexit?

Professionelle Seminare im Bereich MS-Office

Bedienungsanleitung Rückabwicklungsrechner

Access Grundlagen für Anwender. Andrea Weikert 1. Ausgabe, 1. Aktualisierung, Juli inkl. zusätzlichem Übungsanhang ACC2010-UA

5.2 Neue Projekte erstellen

Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert

Berechnungen in Access Teil I

Klicken Sie auf Weiter und es erscheint folgender Dialog

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

ACHTUNG: Es können gpx-dateien und mit dem GP7 aufgezeichnete trc-dateien umgewandelt werden.

Anwendungsbeispiele Buchhaltung

Gimp Kurzanleitung. Offizielle Gimp Seite:

Anleitung über den Umgang mit Schildern

Diana Lange. Generative Gestaltung Operatoren

Rechnung Angebot Zeiterfassung

Ihre Interessentendatensätze bei inobroker. 1. Interessentendatensätze

Den Fehler session error bei der Kalenderanmeldung beheben:

Schrittweise Anleitung zur Erstellung einer Angebotseite 1. In Ihrem Dashboard klicken Sie auf Neu anlegen, um eine neue Seite zu erstellen.

Serienbrieferstellung in Word mit Kunden-Datenimport aus Excel

Kurzanleitung MAN E-Learning (WBT)

Alle Schlüssel-Karten (blaue Rückseite) werden den Schlüssel-Farben nach sortiert und in vier getrennte Stapel mit der Bildseite nach oben gelegt.

Durchführung der Datenübernahme nach Reisekosten 2011

EasyWk DAS Schwimmwettkampfprogramm

Übungen für Woche 10

Anleitung zum Login. über die Mediteam- Homepage und zur Pflege von Praxisnachrichten

Menü Macro. WinIBW2-Macros unter Windows7? Macros aufnehmen

Was ich als Bürgermeister für Lübbecke tun möchte

P&P Software - Adressexport an Outlook 05/29/16 14:44:26

Kursangebot gesammelt einlesen

Das RSA-Verschlüsselungsverfahren 1 Christian Vollmer

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Grammatiken. Einführung

Kapitel 4 Die Datenbank Kuchenbestellung Seite 1

teischl.com Software Design & Services e.u. office@teischl.com

Importdatei EGID/EDID mit Excel erstellen und bearbeiten

1. Adressen für den Serienversand (Briefe Katalogdruck Werbung/Anfrage ) auswählen. Die Auswahl kann gespeichert werden.

Kapitel 3 Bilder farblich verändern - Arbeiten mit Objekten

Herr Müller möchte anderen Menschen helfen. Er bekommt kein Geld für diese Arbeit. Aber die Arbeit macht ihm Freude.

PatXML - Version Kurzanleitung Dokumente erstellen, vervollständigen und speichern

Zwischenablage (Bilder, Texte,...)

So richten Sie Outlook Express ein. Einrichten von Outlook Express (hier am Beispiel von Outlook Express 6) für den Empfang meiner s

Wie Sie mit Mastern arbeiten

Installation und Bedienung von vappx unter ios

Dokumentation für die software für zahnärzte der procedia GmbH Onlinedokumentation

Beispiel des Zusammenführens der APV- Tabellen Stammdaten und Verlaufsdaten mithilfe von Access

Erfahrungen mit Hartz IV- Empfängern

Ist Fernsehen schädlich für die eigene Meinung oder fördert es unabhängig zu denken?

Erstellen einer digitalen Signatur für Adobe-Formulare

Die Post hat eine Umfrage gemacht

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Fotos verkleinern mit Paint

CodeSaver. Vorwort. Seite 1 von 6

Tutorial: Entlohnungsberechnung erstellen mit LibreOffice Calc 3.5

Partitionieren in Vista und Windows 7/8

Eva Douma: Die Vorteile und Nachteile der Ökonomisierung in der Sozialen Arbeit

Dieser Ablauf soll eine Hilfe für die tägliche Arbeit mit der SMS Bestätigung im Millennium darstellen.

SCHRITT 1: Öffnen des Bildes und Auswahl der Option»Drucken«im Menü»Datei«...2. SCHRITT 2: Angeben des Papierformat im Dialog»Drucklayout«...

Angaben zu einem Kontakt...1 So können Sie einen Kontakt erfassen...4 Was Sie mit einem Kontakt tun können...7

Handbuch zur Anlage von Turnieren auf der NÖEV-Homepage

Wie halte ich Ordnung auf meiner Festplatte?

Klausur zur Vorlesung Multivariate Verfahren, SS Kreditpunkte, 90 min

Software- und Druckerzuweisung Selbstlernmaterialien

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1

Running R. Windows Aus Menü. Lese R Code ein führt den Code auch gleich aus, eventuell muss vorher das Verzeichnis gewechselt werden.

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Die Bundes-Zentrale für politische Bildung stellt sich vor

Grundlagen der Informatik

Herstellen von Symbolen mit Corel Draw ab Version 9

Lehrer: Einschreibemethoden

Abituraufgabe zur Stochastik, Hessen 2009, Grundkurs (TR)

OP-LOG

Artikel Schnittstelle über CSV

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

FH-SY Chapter Version 3 - FH-SY.NET - FAQ -

Erste Schritte. Lavid-F.I.S. Faktura. Erste Schritte

ecaros2 - Accountmanager

AUTOMATISCHE -ARCHIVIERUNG. 10/07/28 BMD Systemhaus GmbH, Steyr Vervielfältigung bedarf der ausdrücklichen Genehmigung durch BMD!

Punkt 1 bis 11: -Anmeldung bei Schlecker und 1-8 -Herunterladen der Software

Gratis Excel SVERWEIS Funktions-Anleitung, Tutorial, ebook, PDF-E-Book

Das Leitbild vom Verein WIR

In diesem Tutorial lernen Sie, wie Sie einen Termin erfassen und verschiedene Einstellungen zu einem Termin vornehmen können.

Rundung und Casting von Zahlen

Umwandeln und Exportieren von Adobe-Illustrator-Dateien in Illustrator für Artcut

Handbuch ECDL 2003 Modul 2: Computermanagement und Dateiverwaltung Der Task-Manager

Transkript:

1 Der Datentyp factor in R 2 Beispieldatensatz > patienten<-data.frame( c(28,61,79,54,na,48), c(2,2,3,2,1,1), c("pillen","pillen","massage","gymnastik","massage","gymnastik"), c("10.1.2003","30.12.1999","1.1.2000","27.2.2003","1.3.2003","30.8.2001"), c(true,false,false,false,true,false)) > names(patienten)<-c("alter","schweregrad","behandlung","datum","erfolg") > patienten Alter Schweregrad Behandlung Datum Erfolg 1 28 2 Pillen 10.1.2003 TRUE 2 61 2 Pillen 30.12.1999 FALSE 3 79 3 Massage 1.1.2000 FALSE 4 54 2 Gymnastik 27.2.2003 FALSE 5 NA 1 Massage 1.3.2003 TRUE 6 48 1 Gymnastik 30.8.2001 FALSE alle nicht numerischen oder logischen Vektoren werden automatisch zum Datentyp factor: > lapply(patienten,is.factor) $Alter $Schweregrad [1] TRUE $Datum [1] TRUE $Erfolg > attach(patienten) > Behandlung [1] Pillen Pillen Massage Gymnastik Massage Gymnastik Levels: Gymnastik Massage Pillen alphabetisch sortiert! > as.character(behandlung) [1] "Pillen" "Pillen" "Massage" "Gymnastik" "Massage" "Gymnastik" > as.numeric(behandlung) [1] 3 3 2 1 2 1 levels(behandlung)

[1] "Gymnastik" "Massage" "Pillen" > codes(behandlung) [1] 3 3 2 1 2 1 > labels(levels(behandlung)) [1] "1" "2" "3" Obacht! > labels(behandlung) [1] "1" "2" "3" "4" "5" "6" > unclass(behandlung) [1] 3 3 2 1 2 1 attr(,"levels") [1] "Gymnastik" "Massage" "Pillen" Mit levels kann man die gültigen Werte einschränken. Werte, die nicht in den levels vorkommen, werden auf NA gesetzt. vgl. Dalgaard S. 16/17

Faktoren und der Datentyp "numeric" > factor(alter) [1] 28 61 79 54 <NA> 48 Levels: 28 48 54 61 79 > is.numeric(factor(alter)) > mode(factor(alter)) [1] "numeric" > as.numeric(factor(alter)) [1] 1 4 5 3 NA 2 Ein Faktor ist als numerischer Vektor gespeichert, die numerischen Werte stimmen aber nicht mit den Levels überein, auch wenn diese ebenfalls Zahlen sind. Wie bekommt man die ursprünglichen Zahlenwerte? as.numeric(as.character(factor(alter))) [1] 28 61 79 54 NA 48 oder as.numeric(levels(factor(alter)))[as.integer(factor(alter))] (letzteres ist Rechenzeit-effizienter) Behandlung von NA > test<-factor(alter,exclude=) > test [1] 28 61 79 54 <NA> 48 Levels: 28 48 54 61 79 NA > as.numeric(test) [1] 1 4 5 3 6 2 ordered factor > as.ordered(schweregrad) [1] 2 2 3 2 1 1 Levels: 1 < 2 < 3 > Schweregrad<- ordered(schweregrad,levels=1:3,labels=c("leicht","mittel","schwer")) > Schweregrad [1] mittel mittel schwer mittel leicht leicht Levels: leicht < mittel < schwer Beachte levels und labels im Vergleich zur Definition > levels(schweregrad) [1] "leicht" "mittel" "schwer" > labels(levels(schweregrad)) [1] "1" "2" "3" > as.numeric(schweregrad) [1] 2 2 3 2 1 1

2.1 Datum > Datum [1] 10.1.2003 30.12.1999 1.1.2000 27.2.2003 1.3.2003 30.8.2001 Levels: 1.1.2000 1.3.2003 10.1.2003 27.2.2003 30.12.1999 30.8.2001 > as.ordered(datum) [1] 10.1.2003 30.12.1999 1.1.2000 27.2.2003 1.3.2003 30.8.2001 Levels: 1.1.2000 < 1.3.2003 < 10.1.2003 < 27.2.2003 < 30.12.1999 < 30.8.2001 das ist die "alphabetische Ordnung" > strptime(datum,format="%d.%m.%y") Error in strptime(datum, format = "%d.%m.%y") : invalid x argument strptime akzeptiert einen factor-wert offensichtlich nicht zum Umwandeln in Datum > strptime(as.character(datum),format="%d.%m.%y") [1] "2003-01-10" "1999-12-30" "2000-01-01" "2003-02-27" "2003-03-01" "2001-08-30" > Datum2<-strptime(as.character(Datum),format="%d.%m.%Y") > is.factor(datum2) > is.numeric(datum2) > class(datum2) [1] "POSIXt" "POSIXlt" Datumdarstellung funktioniert in Splus anders. Die Splus-Darstellung findet man in R in der chron-library > as.ordered(datum2) Error in unique.default(x) : unique() applies only to vectors > as.ordered(as.character(datum2)) [1] 2003-01-10 1999-12-30 2000-01-01 2003-02-27 2003-03-01 2001-08-30 6 Levels: 1999-12-30 < 2000-01-01 < 2001-08-30 < 2003-01-10 <... < 2003-03-01 Die richtige Ordnung erhält man wegen der Darstellung Y-m-d > patienten$datum<-as.ordered(as.character(datum2))

so sieht jetzt unser Frame aus: > patienten Alter Schweregrad Behandlung Datum Erfolg 1 28 mittel Pillen 2003-01-10 TRUE 2 61 mittel Pillen 1999-12-30 FALSE 3 79 schwer Massage 2000-01-01 FALSE 4 54 mittel Gymnastik 2003-02-27 FALSE 5 NA leicht Massage 2003-03-01 TRUE 6 48 leicht Gymnastik 2001-08-30 FALSE > lapply(patienten,class) $Alter $Schweregrad [1] "ordered" "factor" [1] "factor" $Datum [1] "ordered" "factor" $Erfolg in Splus erscheint bei $Alter "integer" und bei $Erfolg "logical" > lapply(patienten,mode) $Alter [1] "numeric" $Schweregrad [1] "numeric" [1] "numeric" $Datum [1] "numeric" $Erfolg [1] "logical" aber > is.numeric(datum) nochmal Obacht! > as.numeric(datum) [1] 4 1 2 5 6 3

logische Abfragen und arithmetische Operationen > Behandlung==1 FALSE FALSE FALSE FALSE FALSE > Behandlung-1 [1] NA NA NA NA NA NA Warning message: "-" not meaningful for factors in: Ops.factor(Behandlung, 1) in Splus keine Warnung > Behandlung>1 [1] NA NA NA NA NA NA Warning message: ">" not meaningful for factors in: Ops.factor(Behandlung, 1) in Splus keine Warnung > Behandlung==Pillen Error: Object "Pillen" not found > Behandlung=="Pillen" [1] TRUE TRUE FALSE FALSE FALSE FALSE > as.numeric(behandlung)==1 FALSE FALSE TRUE FALSE TRUE identisch mit > codes(behandlung)==1 FALSE FALSE TRUE FALSE TRUE aber es funktionieren Character-Operationen: > paste(behandlung,"1") [1] "Pillen 1" "Pillen 1" "Massage 1" "Gymnastik 1" "Massage 1" [6] "Gymnastik 1" speziell bei ordered factors: > Schweregrad [1] mittel mittel schwer mittel leicht leicht Levels: leicht < mittel < schwer > Schweregrad>1 [1] NA NA NA NA NA NA > Schweregrad>leicht Error: Object "leicht" not found > Schweregrad>"leicht" [1] TRUE TRUE TRUE TRUE FALSE FALSE > Schweregrad[2:3]>Schweregrad[4:5] TRUE

3 Replacement Zuweisung eines Werts, der bereits in Levels enthalten ist: > test<-behandlung test[test=="pillen"]<-"massage" > test [1] Massage Massage Massage Gymnastik Massage Gymnastik Levels: Gymnastik Massage Pillen Zuweisung eines Werts, der nicht in Levels enthalten ist: test<-behandlung > test[test=="pillen"]<-"creme" Warning message: invalid factor level, NAs generated in: "[<-.factor"(*tmp*, test == "Pillen", value = "Creme") > test [1] <NA> <NA> Massage Gymnastik Massage Gymnastik Levels: Gymnastik Massage Pillen Es funktioniert, wenn man zuerst die Levels neu definiert: test<-behandlung levels(test)<-c(levels(test),"creme") #---hier bringt Splus eine Fehlermeldung, weil widersprüchliche Zahl von Levels test[test=="pillen"]<-"creme" test [1] Creme Creme Massage Gymnastik Massage Gymnastik Levels: Gymnastik Massage Pillen Creme hier ist die alphabetische Ordnung verlorengegangen! wiederholtes Anwenden von factor schmeißt nicht gebrauchte leves weg: (Beispiel aus help-file) > ff<-factor(substring("statistics",1:10,1:10),levels=letters) > ff [1] s t a t i s t i c s Levels: a b c d e f g h i j k l m n o p q r s t u v w x y z > codes(ff) [1] 19 20 1 20 9 19 20 9 3 19 > factor(ff) [1] s t a t i s t i c s Levels: a c i s t > codes(factor(ff)) [1] 4 5 1 5 3 4 5 3 2 4

merging von factor-vektoren: > test<-c("creme",behandlung) > test [1] "Creme" "3" "3" "2" "1" "2" "1" Umwandlung in Character, weil gemischte Datentypen! > as.numeric(test) [1] NA 3 3 2 1 2 1 Warning message: NAs introduced by coercion > factor(test) [1] Creme 3 3 2 1 2 1 Levels: 1 2 3 Creme aber: > levels(behandlung) [1] "Gymnastik" "Massage" "Pillen" > labels(levels(behandlung)) [1] "1" "2" "3" > as.numeric(factor(test)) [1] 4 3 3 2 1 2 1 es hilft auch nichts, zunächst "Creme" in factor umzuwandeln: > test<-c(as.factor("creme"),behandlung) > test [1] 1 3 3 2 1 2 1 > is.factor(test) > test<-factor(c(as.factor("creme"),behandlung)) > test [1] 1 3 3 2 1 2 1 Levels: 1 2 3 Vor dem Mergen muss man zunächst Faktoren in Character zurückverwandeln: > test2<-c("creme",a.character(behandlung)) > factor(test2) [1] Creme Pillen Pillen Massage Gymnastik Massage Gymnastik Levels: Creme Gymnastik Massage Pillen > as.numeric(factor(test2)) [1] 1 4 4 3 2 3 2

4 Spaltenweises Mergen von Data Frames Füge zweites Datum in das Data Frame ein (2 Tage nach dem ursprünglichen Datum; für Berechnungen im Datum benötigt man die chron-library) > Datum2<c("12.1.2003","1.1.2000","3.1.2000","29.2.2003","3.3.2003","1.9.2001") > Datum2<-strptime(as.character(Datum2),format="%d.%m.%Y") > patienten<-cbind(patienten,datum2) > patienten Alter Schweregrad Behandlung Datum Erfolg Datum2 1 28 2 Pillen 2003-01-10 TRUE 2003-01-12 2 61 2 Pillen 1999-12-30 FALSE 2000-01-01 3 79 3 Massage 2000-01-01 FALSE 2000-01-03 4 54 2 Gymnastik 2003-02-27 FALSE 2003-03-01 5 NA 1 Massage 2003-03-01 TRUE 2003-03-03 6 48 1 Gymnastik 2001-08-30 FALSE 2001-09-01 > lapply(patienten,class) $Alter $Schweregrad [1] "factor" $Datum [1] "ordered" "factor" $Erfolg $Datum2 [1] "POSIXt" "POSIXct" Beim Mergen wird die Variablenklasse beibehalten! (anders als in früheren Versionen von R und Splus) Aber Obacht mit cbind: > testframe<-cbind(1:6,behandlung) > testframe Behandlung [1,] 1 3 [2,] 2 3 [3,] 3 2 [4,] 4 1 [5,] 5 2 [6,] 6 1 > apply(testframe,2,mean)

[1] 3.5 2.0 es wurde ohne Warnung in numeric umgewandelt! Was für ein Objekt ist testframe? > class(testframe[,2]) > is.data.frame(testframe) Bei cbind ist offensichtlich in eine numerische Matrix umgewandelt worden. Neuer Versuch: > testframe<-data.frame(1:6,behandlung) > testframe X1.6 Behandlung 1 1 Pillen 2 2 Pillen 3 3 Massage 4 4 Gymnastik 5 5 Massage 6 6 Gymnastik > apply(testframe,2,mean) X1.6 Behandlung NA Warning messages: NA 1: argument is not numeric or logical: returning NA in: mean.default(newx[, i],...) 2: argument is not numeric or logical: returning NA in: mean.default(newx[, i],...) aber > lapply(testframe,mean) $X1.6 [1] 3.5 [1] NA Warning message: argument is not numeric or logical: returning NA in: mean.default(x[[2]],...) Fazit: Behandelt man ein Data Frame als Matrix, geht die Klassierung als Faktor verloren. Verwende statt cbind data.frame. Äquivalent sind > testframe<-data.frame(1:6,behandlung) und > testframe<-cbind(1:6,data.frame(behandlung)) Was passiert bei Mittelwertbildung? > lapply(patienten,mean)

$Alter [1] NA numerisch, aber mit NA $Schweregrad [1] 1.833333 bei ordered factor wird Mittelwert gebildet! [1] NA $Datum [1] NA Mittelwertbildung bei Faktoren nicht sinnvoll $Erfolg [1] 0.3333333 Mittelwertbildung nach Umcodierung von TRUE in 1 und FALSE in 0 $Datum2 [1] "2001-11-02 15:50:00 Westeuropäische Normalzeit" hier war Datum nicht in factor umgewandelt worden Warning messages: 1: argument is not numeric or logical: returning NA in: mean.default(x[[3]],...) 2: argument is not numeric or logical: returning NA in: mean.default(x[[4]],...) > 5 Import mit read.table Excel-File als txt (tab-delimited) speichern, importieren mit test<-read.table("c:\\temp\\test.txt",header=true) (sonst versteht R die Spaltennamen als erste Datenzeile) Dann geschieht die Umwandlung so wie bei der direkten Eingabe Bei Splus6 geschieht der Import über das Menü aus Excel-Files korrekt, aber wenn in der 1. Zeile ein NA ist, wandelt Splus diese Spalte immer in factor um.

Plotten von Faktoren plot(x,y) x als Faktor ruft plot.factor auf, dieses wiederum versucht boxplot oder barplot zu erzeugen testx_factor(c(rep("gruppe2",10),rep("gruppe1",10),rep("gruppe3",10))) testy_runif(30) plot(testx,testy) gibt boxplot! plot(testx,testy,type="p") Plot-Methode plot.factor - erzeugt boxplot oder barplot! Abhilfe schafft plot(unclass(testx),testy,axes=f) axis(1,at=unique(testx),labels=levels(testx)) axis(2) box()

6 Exkurs: chron library #---Addition von Tagen habe ich mit strptime nicht rausgekriegt library(chron) > datum.orig_c("10.1.2003","30.12.1999","1.1.2000","27.2.2003","1.3.2003","30.8.2 001") > dates(datum.orig,format="d.m.y") [1] 10.01.03 30.12.99 01.01.00 27.02.03 01.03.03 30.08.01 > dates(datum.orig,format="d.m.y")+2 [1] 12.01.03 01.01.00 03.01.00 01.03.03 03.03.03 01.09.01 > ordered(dates(datum.orig,format="d.m.y")+2) [1] 12064 10957 10959 12112 12114 11566 Levels: 10957 < 10959 < 11566 < 12064 < 12112 < 12114 > class(dates(datum.orig,format="d.m.y")) [1] "dates" "times" Datum2_dates(datum.orig,format="d.m.y")+2 #---Datentyp wird erhalten, nicht mehr zwangsweise in factor umgewandelt testframe_data.frame(patienten,datum2) > lapply(testframe,class) $Alter $Schweregrad [1] "factor" $Datum [1] "factor" $Erfolg $Datum2 [1] "dates" "times" Damit sind Probleme behoben, die alte Versionen von R und Splus brachten!