Align a vector of strings to the left, to the right, to the center or to the first occurance of a specified character, e.g. to the decimal separator. Alignment is achieved by padding the strings with empty spaces (which evidently only will have an alignment effect if the text is displayed with a monospaced font).

StrAlign(x, sep = "\\r")

Arguments

x

a character vector to be aligned.

sep

the character on whose position the strings will be aligned. Left alignment can be requested by setting sep = "\\l", right alignment by "\\r" and center alignment by "\\c". Mind the backslashes, as if they are omitted, strings would be aligned to the character l, r or c respectively. Default value is "\\r", thus right alignment.

Details

Alignment to the left or right leave no room for misinterpretation. The function will determine the maximum string size in the vector, resize all the strings to this size by padding empty spaces either at the beginning or at the end.

cbind(StrAlign(c("here", "there", "everywhere"), sep = "\r"))
[1,] "      here"
[2,] "     there"
[3,] "everywhere"

When it comes to center strings, it's not clear where to place strings with an even length in case the maximum length is odd (or vice versa). We will put the shorter distance of an uneven string to the left (note the second term, that has 2 spaces on the left and 3 spaces on the right).

cbind(StrAlign(c("here", "there", "everywhere"), sep = "\c"))
[1,] "   here   "
[2,] "  there   "
[3,] "everywhere"

Any specific length of the strings can be created by StrPad if required.

In case of a given character as separator the strings will be aligned towards this separator. Frequently this might be the decimal separator. If a string does not contain the separator, the affected string will be aligned as if it had a separator as last character. This seems to be a good default, when integer numbers are to be aligned with numerical values. Note that the character length of the resulting strings can excceed the maximum length of the supplied strings.

z <- c(" 6.0", "6.00 ", " 45.12 ", "784", NA)
cbind(StrAlign(z, sep="."))
     [,1]    
[1,] "  6.0 "
[2,] "  6.00"
[3,] " 45.12"
[4,] "784   "
[5,] NA     

The character strings will not be pruned of whitespaces, if the requested alignment does not explicitly require it. StrTrim can be used for that.

Value

a character vector containing the aligned strings

Author

Andri Signorell <andri@signorell.net>

See also

Examples

# align on (the first occuring) B
x <- c("ABCDMNB", "CDGHEBK", "BCI")
cbind(StrAlign(x, sep="B"))
#>      [,1]         
#> [1,] "    ABCDMNB"
#> [2,] "CDGHEBK    "
#> [3,] "     BCI   "

# align to decimal separator (here point)
z <- c("    6.0", "6.00  ", " 45.12    ", "784", NA)
cbind(StrAlign(z, sep="."))
#>      [,1]      
#> [1,] "    6.0 "
#> [2,] "    6.00"
#> [3,] "   45.12"
#> [4,] "  784   "
#> [5,] NA        

# right align, the width will be the max number of characters in x
cbind(StrAlign(x, sep="\\r"))
#>      [,1]     
#> [1,] "ABCDMNB"
#> [2,] "CDGHEBK"
#> [3,] "    BCI"
# left align
cbind(StrAlign(x, sep="\\l"))
#>      [,1]     
#> [1,] "ABCDMNB"
#> [2,] "CDGHEBK"
#> [3,] "BCI    "
# center
cbind(StrAlign(x, sep="\\c"))
#>      [,1]     
#> [1,] "ABCDMNB"
#> [2,] "CDGHEBK"
#> [3,] "  BCI  "