2012-11-22 9 views
7

Ich habe folgende DatenR Polsterung 0'en in einem String

GT-BU7867-09 
GT-BU6523-113 
GT-BU6452-1 
GT-BU8921-12 

Wie kann ich R verwenden, um die Zahlen nach dem Bindestrich-Pad führende Nullen zu machen, damit es drei Ziffern haben wird? Das resultierende Format soll wie folgt aussehen:

GT-BU7867-009 
GT-BU6523-113 
GT-BU6452-001 
GT-BU8921-012 

Antwort

11

Basislösung:

sapply(strsplit(x,"-"), function(x) 
    paste(x[1], x[2], sprintf("%03d",as.numeric(x[3])), sep="-") 
) 

Ergebnis:

[1] "GT-BU7867-009" "GT-BU6523-113" "GT-BU6452-001" "GT-BU8921-012" 
+0

Große Hilfe .. vielen Dank. – geodex

3

Eine Lösung stringr und str_pad und strsplit mit

library(stringr) 
    x <- readLines(textConnection('GT-BU7867-09 
GT-BU6523-113 
GT-BU6452-1 
GT-BU8921-12')) 

unlist(lapply(strsplit(x,'-'), 
     function(x){ 
     x[3] <- str_pad(x[3], width = 3, side = 'left', pad = '0') 
     paste0(x, collapse = '-')})) 

[1] "GT-BU7867-009" "GT-BU6523-113" "GT-BU6452-001" 
[4] "GT-BU8921-012" 
1

andere Version str_pad und str_extract von Paket stringr

library(stringr) 
x <- gsub("[[:digit:]]+$", str_pad(str_extract(x, "[[:digit:]]+$"), 3, pad = "0"), x) 

d.h. Extrahieren der abfallenden Zahlen von x, pad sie mit 3 0s, dann ersetzen diese für die ursprünglichen nachlaufNummern.