Variable in numerische umwandeln

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

Moderatoren: EDi, jogo

Antworten
Giaaa

Variable in numerische umwandeln

Beitrag von Giaaa »

Allgemeines Problem gerade. Habe eine Kosten-Variable mit Komma als Trennzeichen. Leider liest R diese (wie auch einige andere Variable) als character ein. Mittelwertberechnungen etc, funktionieren somit nicht. Wie kann ich die Daten als numerische einlesen? Danke schon einmal im voraus. :)
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Variable in numerische umwandeln

Beitrag von jogo »

Hallo Giaaa,

willkommen im Forum!
Giaaa hat geschrieben: Mo Jun 12, 2017 10:58 am Allgemeines Problem gerade. Habe eine Kosten-Variable mit Komma als Trennzeichen. Leider liest R diese (wie auch einige andere Variable) als character ein. Mittelwertberechnungen etc, funktionieren somit nicht. Wie kann ich die Daten als numerische einlesen? Danke schon einmal im voraus. :)
meinst Du jetzt als Dezimaltrennzeichen oder als Tausendertrenner?
Bei read.table() gibt es die Parameter sep= und dec=, mit denen man das Verhalten von read.table() steuern kann. Bitte lies den Hilfetext der Funktion:

Code: Alles auswählen

help("read.table") # oder
help(read.table)  # oder
?read.table  # oder
?"read.table"
Wenn nichts weiter hilft, muss man mit den Zeichenkettenfunktion störende Teile ersetzen.

Gruß, Jörg
bigben
Beiträge: 2780
Registriert: Mi Okt 12, 2016 9:09 am

Re: Variable in numerische umwandeln

Beitrag von bigben »

Hi!

Ganz grundsätzlich möchte ich Jörgs Ansatz unterstreichen, die Daten so gut wie möglich einzulesen und das Problem damit von Anfang an zu umgehen.
Nur als Ausweichvariante und wenn es gute Gründe gibt, ist es natürlich auch möglich, einmal falsch als String eingelesene Zahlen wieder in Zahlen umzuwandeln:

Code: Alles auswählen

strings <- c("-1,2", "2,0", "3", "359090,99")
numbers <- scan(text = strings, dec = ",")
str(numbers)
Das ändert nichts am Prinzip, das Problem möglichst schon beim Einlesen zu umgehen.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
azub

Variable in numerische umwandeln

Beitrag von azub »

Hallo Forum,

ich habe ein ähnliches Problem beim Einlesen einer csv-Datei mit folgendem Aufbau

Datum;Eroeffnung;Hoch;Tief;Schluss;Volumen
03.01.2000;1.471,21;1.478,00;1.438,36;1.455,22;1.100.700.000
04.01.2000;1.449,00;1.449,00;1.397,43;1.399,42;1.209.800.000
05.01.2000;1.395,62;1.413,27;1.377,68;1.402,11;1.115.800.000

Einlesen mit read.table liefert mir einen data.frame mit char-Vektoren, d.h. die Zahlen im Format 'xxx.xxx,xx' werden nicht als solche erkannt

> tb <- read.table('TEST.csv', header=TRUE,strip.white=TRUE,stringsAsFactors=FALSE,sep=";",dec=",")
> str(tb)
'data.frame': 3 obs. of 6 variables:
$ Datum : chr "03.01.2000" "04.01.2000" "05.01.2000"
$ Eroeffnung: chr "1.471,21" "1.449,00" "1.395,62"
$ Hoch : chr "1.478,00" "1.449,00" "1.413,27"
$ Tief : chr "1.438,36" "1.397,43" "1.377,68"
$ Schluss : chr "1.455,22" "1.399,42" "1.402,11"
$ Volumen : chr "1.100.700.000" "1.209.800.000" "1.115.800.000"

Zur besser lesbaren Ausgabe numerischer Variablen gibt es ja die Funktion formatC mit Syntax formatC(x, ... format = NULL, ... )
Der Help-Text sagt zum Argument format: ... ‘"f"’ gives numbers in the usual ‘xxx.xxx’ format ...

Eine entsprechende Eingabe-Funktion zur Konvertieren von Zahlen im Format 'xxx.xxx,xx' (o.ä.) in numerische Variablen wäre praktisch,
n <- formatC.input(x, ..., format="f", ...).
GIbt es so etwas vorgefertigt, oder muss ich sie selber schreiben :?:
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Variable in numerische umwandeln

Beitrag von EDi »

Sowas?

Code: Alles auswählen

df <- read.table(text = 'Datum;Eroeffnung;Hoch;Tief;Schluss;Volumen
03.01.2000;1.471,21;1.478,00;1.438,36;1.455,22;1.100.700.000
04.01.2000;1.449,00;1.449,00;1.397,43;1.399,42;1.209.800.000
05.01.2000;1.395,62;1.413,27;1.377,68;1.402,11;1.115.800.000',
                 header = TRUE, sep = ';', stringsAsFactors = FALSE)
str(df)

df[ , 2:6] <- apply(df[ , 2:6], 2, function(y) as.numeric(gsub(',', '.', gsub('[.]', '', y))))
str(df)
df
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.
azub

Re: Variable in numerische umwandeln

Beitrag von azub »

Hallo EDI,

ja so etwas.
Die mir klappt es mit dem Ergebnis noch nicht ganz, die Nachkomma-Stellen bei den Integern werden nicht angezeigt (und die letzte Spalte möchte ich 10-stellig angeziegt bekommen). Da muss ich noch etwas lesen und probieren, um das gewünschte Ergebnis zu erhalten.
Bildschirmfoto_R.png
danke für die schelle Antwort
Wolfgang
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Variable in numerische umwandeln

Beitrag von jogo »

Hallo Wolfgang,
azub hat geschrieben: Fr Jul 07, 2017 5:35 pm Bei mir klappt es mit dem Ergebnis noch nicht ganz, die Nachkomma-Stellen bei den Integern werden nicht angezeigt (und die letzte Spalte möchte ich 10-stellig angeziegt bekommen). Da muss ich noch etwas lesen und probieren, um das gewünschte Ergebnis zu erhalten.
integer mit Nachkommastellen? Meinst Du folgendes:
obwohl die Werte ganzzahlig sind, möchtest Du bei der Ausgabe irgendeine Anzahl von Nachkommastellen angezeigt haben?
Für dieses und auch für das andere Formatierungsproblem gibt es sprintf(), z.B.

Code: Alles auswählen

sprintf("%013.2f", 999)
Gruß, Jörg
azub

Re: Variable in numerische umwandeln

Beitrag von azub »

Hallo EDI, hallo Jörg,

danke für Jörgs Hinweis.
Nachdem ich EDIs Beispiel noch einmal probiert habe - Unterschiedliche Ausgabe von str(df) und df - ist mir klargeworden, dass str() numerische Variablen ohne Nachkomma-Stellen ausgibt. Die Konvertierung funktioniert, aber die Ausgabe von str() zeigt das nicht so an.

viele Grüße
Wolfgang
Antworten