2017-12-28 19 views
0

habe ich eine Spalte („Raten“), die ein factor mit mehreren Ebenen ist, wie zum Beispiel:Factor mit Komma und Prozentsatz numerischen

16 Stufen: -0186% -0229% -0326% ...

Wenn ich versuche, es in numeric zu konvertieren, werden NA eingeführt und ich kann nicht herausfinden, wie es richtig geht.

rates=as.numeric(gsub(",", ".", rates)) 
rates=as.numeric(sub("%", "e-2", rates)) 

Ich versuchte auch Folgendes, das war die Antwort auf eine ähnliche Frage, aber es funktioniert auch nicht. rates=as.numeric(gsub("\\%", "", rates))

+0

Versuchen 'as.numeric (gsub (‘, ' '-0186%')'. ') '' Vs as.numeric (gsub (', ''. ',' -0,186 ')). Dieses Prozentzeichen ('%') produziert die NA – Sotos

Antwort

1

Verwendung gsub:

# Example vector 
vec <- as.factor(c("-0,186%", "-0,229%", "-0,326%")) 

# Convert vector to numeric 
vec <- as.numeric(gsub(",", ".", gsub("%", "", as.character(vec)))) 
+1

Sie können 'sub' anstelle von' gsub' verwenden – PoGibas

+0

@PoGibas Ja, Sie haben Recht, beides ist möglich. – JSP

+0

das ist perfekt. Vielen Dank – Rose

1

Ich gehe davon aus das Niveau Ihrer ersten Faktor chars sind. Dann müssen Sie gleichzeitig die beiden Ersatz tun:

rates=as.numeric(gsub(",", ".", gsub("%", "e-2", rates))) 
+0

Vielen Dank. Warum sollte es gleichzeitig benutzt werden? Mit freundlichen Grüßen – Rose

+0

Wenn Sie nur eine dieser Operationen ausführen, wird 'as.numeric' blockiert, da das andere Zeichen dafür ungültig ist. Alternativ könnten Sie zuerst zwei gsubs in separaten Zeilen ausführen und nur as.numeric im zweiten oder in der dritten Zeile darunter hinzufügen. – PrzeM

2

Eine weitere Option ist die parse_number -function vom readr -Paket zu verwenden und festlegen, dass ein Komma als Dezimalzeichen verwendet wird:

parse_number(rates, locale = locale(decimal_mark = ',')) 

die gibt:

[1] -0.186 -0.229 -0.326 

Gebrauchte Daten:

rates <- as.factor(c("-0,186%", "-0,229%", "-0,326%")) 
Verwandte Themen