基本的に次のようなマトリックスがあります
100 2100
31000 230
31 9199
そして、100 --> 00100 または 9199 --> 09199 のように、すべての数字を同じサイズにしたいと考えています。何か提案はありますか?
使用できますformatC
:
numMx <- matrix(c(100,2100,31000,230,31,9199),nrow=3,byrow=T)
frmt <- "d" # d --> numbers formatted as integers
minWidth <- 5 # minimum characters length of each number e.g. 42 --> "00042"
chMx <- formatC(numMx, width = minWidth, format = frmt, flag = "0")
# > chMx
# [,1] [,2]
# [1,] "00100" "02100"
# [2,] "31000" "00230"
# [3,] "00031" "09199"
最小幅を自動的に決定するには、次のコードを使用できます。
minWidth <- max(nchar(formatC(numMx,format=frmt)))
同じ問題に次の関数を使用します。
add0 <- function(x, len) #x = number to add 0 ; len = the wanted length of the number
{
x.len <- length(unlist(strsplit(as.character(x), split = "")))
ifelse(x.len < len, paste(paste(rep(0, len - x.len), collapse = ""), x, sep = ""), as.character(x))
}
テスト:
mat <- matrix(sample(1:25, 25), 5, 5) #random matrix
apply(mat, c(1,2), add0, len = max(nchar(as.character(mat)))) #change whole matrix using maximum "length" of its values