Variable in numerische umwandeln
Variable in numerische umwandeln
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.
Re: Variable in numerische umwandeln
Hallo Giaaa,
willkommen im Forum!
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:Wenn nichts weiter hilft, muss man mit den Zeichenkettenfunktion störende Teile ersetzen.
Gruß, Jörg
willkommen im Forum!
meinst Du jetzt als Dezimaltrennzeichen oder als Tausendertrenner?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.
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"
Gruß, Jörg
Re: Variable in numerische umwandeln
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:
Das ändert nichts am Prinzip, das Problem möglichst schon beim Einlesen zu umgehen.
LG,
Bernhard
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)
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Variable in numerische umwandeln
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
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
Re: Variable in numerische umwandeln
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
.
Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
.
Re: Variable in numerische umwandeln
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. danke für die schelle Antwort
Wolfgang
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. danke für die schelle Antwort
Wolfgang
Re: Variable in numerische umwandeln
Hallo Wolfgang,
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.
Gruß, Jörg
integer mit Nachkommastellen? Meinst Du folgendes: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.
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)
Re: Variable in numerische umwandeln
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
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