Füge führende Nullen innerhalb der Zeichenkette hinzu

8

Ich habe eine Reihe von Spaltennamen, die ich zu standardisieren versuche.

%Vor%

Ich möchte, dass alles, was eine einziffrige Zahl hat, mit einer Null aufgefüllt wird, also

%Vor%

Ich habe versucht, stringr

zu verwenden %Vor%

aber nicht in der Lage, herauszufinden, wie man selektiv ersetzt / vorgibt ...

    
ano 01.12.2015, 17:36
quelle

4 Antworten

8

Sie können sub("([a-z])([0-9])$","\10\2",names) :

verwenden %Vor%

Es ändert nur die Namen, bei denen nach einem Buchstaben eine einzelne Ziffer steht ( $ ist das Ende der Zeichenkette).

Der \1 wählt den ersten Block in () : den Buchstaben. Dann setzt er eine führende 0, dann den zweiten Block in () : die Ziffer.

    
etienne 01.12.2015, 17:47
quelle
6

Hier ist eine Option, die negative Look-Ahead- und Look-Behind-Assertionen verwendet, um einzelne Ziffern zu identifizieren.

%Vor%     
Matthew Plourde 01.12.2015 17:42
quelle
1

str_pad von stringr:

%Vor%

Dies gilt auch für Fälle von c("a","a2","a20","a202") bis c("a","a002","a020","a202") , die von den anderen Ansätzen nicht abgedeckt werden.

Das stringr-Paket basiert auf stringi, das die gleiche Funktionalität wie ich hier verwende, rate ich.

sprintf von der Basis aus, mit einem ähnlichen Ansatz:

%Vor%

pad_if2 hat eine geringere allgemeine Verwendung als pad_if , da x zwingend numerisch sein muss. So ziemlich jeder Schritt ist klirrender als der entsprechende Code mit den oben genannten Paketen.

    
Frank 01.12.2015 18:05
quelle
0

Der Schlüssel besteht darin, eine einzelne Ziffer mit $ und einen Buchstaben vor der Ziffer zu identifizieren. Es könnte versucht werden:

%Vor%

oder Vorschau.

%Vor%     
Shenglin Chen 01.12.2015 18:18
quelle

Tags und Links