2017-12-01 3 views
0

Ich muss eine Reihe von Postleitzahlen in R lesen, aber sie müssen doppelt sein. Ich muss auch die führenden Nullen für diejenigen behalten, die mit Null beginnen. Ich habe versucht,Wie führe ich führende Nullen im Doppeltyp in der R-Spalte

for (i in 1:length(df$region)){ 
    if (nchar(df$region[i])==4) { 
    df$region[i] <- paste0("0", df$region[i]) 
    } 
} 

Dieser wandelt die Art, wie ich zu wollen, aber es ändert sich alle Zeichentyp und ich kann nicht die Region Spalte in einer anderen Funktion lesen, die numerischen oder Doppel erfordert. Wenn ich in numerisch oder doppelt konvertiere, werden die führenden Nullen wieder gelöscht. Irgendwelche Ideen?

+2

"aber sie müssen doppelt sein" Das erscheint äußerst unwahrscheinlich. – Roland

Antwort

1

Warum nicht sie als eine Zahl speichern und nur die Nullen bei Bedarf über formatC hinzufügen? Zum Beispiel

tst <- 345 
class(tst) 
formatC(tst, width = 5, format = "d", flag = "0") 

gibt,

#[1] "numeric" 
#[1] "00345" 

Der Kürze halber Sie sogar einen Wrapper schreiben konnte:

zip <- function(z)formatC(z, width = 5, format = "d", flag = "0") 
zip(tst) 
#[1] "00345" 

Davon profitiert nur Nullen führen, wenn nötig.

zip(12345) 
#[1] "12345" 
1

Ich würde empfehlen, zwei Spalten zu behalten, eine in der die Postleitzahl als Text erscheint, und die andere als Doppel. Sie müssten zuerst die Postleitzahlen als Zeichendaten einlesen und dann daraus die Doppelspalte erstellen, z.

Doppelte Variablen behalten normalerweise nicht die Anzahl der führenden Nullen, da diese Ziffern ohnehin nicht signifikant sind. Ich denke, dass das Speichern Ihrer Postleitzahlen als Zeichendaten die einzige Option ist.

+0

Macht Sinn, danke! –