falsche Tabellencodierung beim wiederöffnen

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Regression
Beiträge: 76
Registriert: Mo Jan 15, 2018 9:57 am

falsche Tabellencodierung beim wiederöffnen

Beitrag 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 :

Code: Alles auswählen

save(Tablename, file="Tablename.csv")
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!
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: falsche Tabellencodierung beim wiederöffnen

Beitrag 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
Regression
Beiträge: 76
Registriert: Mo Jan 15, 2018 9:57 am

Re: falsche Tabellencodierung beim wiederöffnen

Beitrag 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
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: falsche Tabellencodierung beim wiederöffnen

Beitrag 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
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: falsche Tabellencodierung beim wiederöffnen

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Regression
Beiträge: 76
Registriert: Mo Jan 15, 2018 9:57 am

Re: falsche Tabellencodierung beim wiederöffnen

Beitrag 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:

Code: Alles auswählen

myData<-test[-2]
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:

Code: Alles auswählen

save(myData, file="myData.csv")
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
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: falsche Tabellencodierung beim wiederöffnen

Beitrag 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
Regression
Beiträge: 76
Registriert: Mo Jan 15, 2018 9:57 am

Re: falsche Tabellencodierung beim wiederöffnen

Beitrag 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
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: falsche Tabellencodierung beim wiederöffnen

Beitrag 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.
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: falsche Tabellencodierung beim wiederöffnen

Beitrag 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
Antworten