Seite 1 von 2
falsche Tabellencodierung beim wiederöffnen
Verfasst: Mo Jan 15, 2018 10:09 am
von Regression
Guten Tag zusammen,
ich habe folgendes Problem:
ich lade eine Tabelle und bearbeite diese im RStudio.
Sobald die Daten aufgearbeitet sind speichere ich diese mittels :
ab.
Das Problem ist, sobald ich die Tabelle wieder öffne ist das Format unlesbar.
ich hab bislang folgendes versucht:
Speicherung in unterschiedliche Formate: *.txt; *.csv und *.r
Die Codierung intern geändert mit:
Tools -> Global Options -> Code -> Saving -> Default text Encoding utf-8
Bislang alles vergebens.
Wie kann ich die Tabelle Speichern/und öffnen für weitere Bearbeitung?
Besten Dank im Voraus!
Re: falsche Tabellencodierung beim wiederöffnen
Verfasst: Mo Jan 15, 2018 11:46 am
von jogo
Hallo Regression,
willkommen im Forum!
Die Funktion
save() speichert die Daten in einer Datei vom Format
RData - der Dateiname dabei ist beliebig.
Das Gegenstück zu
save() ist
load(). Bitte die Dokumentation der Funktionen lesen
Wenn Du wirklich eine CSV-Datei schreiben möchtest, solltest Du die Funktion
write.table() verwenden.
Gruß, Jörg
Re: falsche Tabellencodierung beim wiederöffnen
Verfasst: Mo Jan 15, 2018 2:06 pm
von Regression
Danke Jörg für Deine Antwort,
hab mein Anliegen wohl nicht genug präzisiert:
mit save() Funktion lade ich die Daten. Diese beinhalten aber redundante Information oder aber auch falsches Format (z.b. dass in einer Spalte Character : Nummeric steht). D.h. ich lösche die Redundanten Spalten und bringe die Spaten in ein Format die ich für die weitere Berechnung brauche.
Diese Modifizierte Tabelle möchte ich dann abspeichern (mit Save()-Funktion).
Aber sobald ich die gespeicherte Tabelle wieder öffnen möchte (auch in RStudio (!)) kommt nur ein Sonterzeichensalat zum Augenschein.
LG
Re: falsche Tabellencodierung beim wiederöffnen
Verfasst: Mo Jan 15, 2018 2:18 pm
von jogo
Bitte liefere uns Daten und den Code, damit wir das Verhalten reproduzieren können.
siehe:
viewtopic.php?f=20&t=11
Gruß, Jörg
Re: falsche Tabellencodierung beim wiederöffnen
Verfasst: Mo Jan 15, 2018 2:46 pm
von bigben
Regression hat geschrieben: Mo Jan 15, 2018 2:06 pmmit save() Funktion lade ich die Daten.
Nein, das tust Du ganz sicher nicht.
Speicherung in unterschiedliche Formate: *.txt; *.csv und *.r
Nichts davon kann man mit save() speichern. Die erten beiden erfordern write.table und das dritte sollte nicht der Weg sein.
Aber sobald ich die gespeicherte Tabelle wieder öffnen möchte (auch in RStudio (!))
Wie willst Du die Daten denn in RStudio einlesen. Über das Menü "Tools"-> "Import dataset" -> "From text file..." ? Oder indem Du ein Kommando eingibst? Das Kommando zum Abspeichern muss zu dem beim Speichern passen. Deshalb ist es so wichtig, dass Du ein paar Beispieldaten gibst und die Kommandos, mit denen Du gescheitert bist.
Am Ende wird herauskommen, dass Du die Daten mit write.table schreiben und mit read.table einlesen solltest.
LG,
Bernhard
Re: falsche Tabellencodierung beim wiederöffnen
Verfasst: Mo Jan 15, 2018 3:52 pm
von Regression
Also hier ist das minimal Beispiel:
Code: Alles auswählen
a<-c("x:1","x:2","x:3")
b<-c("a","b","c")
c<-c(100, 200, 300)
test<-data.frame(a,b,c)
Sei test die gegebene Datenmenge die ich mittels load() Funktion einlese.
Diese enthält eine redundante Spalte die ich wie folgt entferne:
Nun, die erste Spalte enthält character+numeric Formate, hierfür benutze ich die separate() Funktion aus dem tidyr-Paket.
Code: Alles auswählen
myData<- separate(MyData, V1, c("x", "x_Value"), sep=":")
Anschließend wandle ich die x_Value Spalte in numeric um mit:
Code: Alles auswählen
myData$x_Value<-as.numeric(as.character(myData$x_Value))
Finally, liegen die Daten so vor wie ich diese benötige.
ich speichere diese mit:
ab.
so nun möchte ich die Daten wieder öffnen, gehe ich wie folgt vor im RStudio im Enviroment-> Import Dataset ->myData.csv
und es erscheint ein Sonterzeichensalat.
Huch, hoffe es war nun vollständig und nachvollziehbar genug...
LG
Und Besten Dank im Voraus
Re: falsche Tabellencodierung beim wiederöffnen
Verfasst: Mo Jan 15, 2018 4:11 pm
von jogo
Eigentlich weiß ich nicht, was ich noch schreiben soll
Alles wesentliche habe ich schon in meiner ersten Nachricht geschrieben:
ob Du der Datei die Endung ".csv" verpasst oder irgendeine andere, hat keinen Einfluss auf das interne Format der Datei, die
save() erzeugt:
es ist eine Datei mit Binärinformation (etwa wie eine Programmdatei "~.exe").
Was Du da betreibst, ist etwas wie
1. Umbenennen einer Datei
dat.exe in
dat.csv
2. Einlesen dieser Datei in der Erwartung, dass durch das Ändern der Endung es sich nun um eine CSV-Datei handelt.
Ein echte CSV-Datei ist eine ASCII-Datei und kann mit einem Editor gelesen werden, z.B. zur Ansicht. Die Funktion save() schreibt eine RData-Datei.
Hier noch etwas zum RData-Format:
https://stackoverflow.com/a/18529176/5414452
https://www.loc.gov/preservation/digita ... 0470.shtml
Gruß, Jörg
Re: falsche Tabellencodierung beim wiederöffnen
Verfasst: Mo Jan 15, 2018 4:26 pm
von Regression
Vielen Dank für die Zeit und Mühe die Ihr für die Beantwortung investiert!
mit write.table(myData, file="myData.csv") entsteht zumindest kein Sonderzeichensalat mehr

DANKE
Allerdings, wird nun alles in eine Spalte abgespeichert.
Wie kann ich diese separieren?
LG
Re: falsche Tabellencodierung beim wiederöffnen
Verfasst: Mo Jan 15, 2018 6:55 pm
von EDi
Allerdings, wird nun alles in eine Spalte abgespeichert.
Wie kann ich diese separieren?
write.table & read.table haben beide ein "sep=" welches den Spaltentrenner angibt.
Re: falsche Tabellencodierung beim wiederöffnen
Verfasst: Mo Jan 15, 2018 8:28 pm
von jogo
Hier ist eine erste Variante von mir:
Code: Alles auswählen
dat <- data.frame(
a=c("x:1","x:2","x:3"),
b=c("a","b","c"),
c=c(100, 200, 300), stringsAsFactors = FALSE)
asplit <- strsplit(dat$a, ':', fixed=TRUE)
dat$a.text <- sapply(asplit, '[[', i=1)
dat$a.num <- as.numeric(sapply(asplit, '[[', i=2))
dat
Ich habe noch eine weitere Idee, zu der ich noch etwas basteln muss ...
... fertig:
Code: Alles auswählen
dat <- data.frame(
a=c("x:1","x:2","x:3"),
b=c("a","b","c"),
c=c(100, 200, 300))
adat <- read.table(text=as.character(dat$a), sep=':')
cbind(dat, adat)
(Ich habe bei diesem zweiten Beispiel mich nur auf das Splitten der Zeichenketten konzentriert.)
Und eine dritte Variante:
Code: Alles auswählen
dat <- data.frame(
a=c("x:1","x:2","x:3"),
b=c("a","b","c"),
c=c(100, 200, 300))
matrix(unlist(strsplit(as.character(dat$a), ':', fixed=TRUE)), nrow=nrow(dat), byrow=TRUE)
(Auch hier wieder nur das zentrale Problem behandelt. Bei einem
cbind(dat, ...) mit der Matrix wird man vorher oder nachher die Spalten umbenennen wollen, z.B. auch gleich mit
matrix(..., dimnames=...).
Gruß, Jörg