J'ai un vecteur de chaînes de caractères qui doivent avoir chacune 8 caractères alphanumériques. Elles peuvent inclure un ou plusieurs espaces à l'intérieur la chaîne, et non la droite ou la gauche.
Pour les chaînes de moins de 8 caractères, j'aimerais remplir les espaces existants, de sorte qu'au final, toutes les chaînes aient 8 caractères. Les espaces/compléments doivent être conservés à l'intérieur la chaîne. (Contexte : il s'agit des codes postaux du Royaume-Uni)
Mon approche est alambiquée et peut-être imparfaite. Vous trouverez ci-dessous un exemple de vecteur et de résultat souhaité.
## x can take any alphanumeric value
x <- c("xxx xxx", "xx xxx", "x xxx", "xxx xxx", "xx xxx", "xxxxxxxx")
## missing number of spaces
s_miss <- 8 - nchar(x)
## numbers of spaces
s_pres <- stringr::str_count(x, "\\s")
## now here is a convoluted function
## if a space is found, the missing spaces will be added to the already present spaces
padded <- sapply(1: length(x), function(i){
gsub("\\s+", paste(rep(" ", s_pres[i] + s_miss[i]), collapse = ""), x[i])})
## desired output
padded
#> [1] "xxx xxx" "xx xxx" "x xxx" "xxx xxx" "xx xxx" "xxxxxxxx"
nchar(padded)
#> [1] 8 8 8 8 8 8