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
aber nicht in der Lage, herauszufinden, wie man selektiv ersetzt / vorgibt ...
Sie können sub("([a-z])([0-9])$","\10\2",names)
:
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.
Hier ist eine Option, die negative Look-Ahead- und Look-Behind-Assertionen verwendet, um einzelne Ziffern zu identifizieren.
%Vor%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.
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%