Вот подход в два этапа с str_match
и sprintf
.Сначала мы разбиваем все:
n <- 4 # or str_count(v1, ",")[1] of it's common to all the rows
(M <- str_match(v1, paste0(rep("(\\d{2})(\\d*)-(\\d*)[, ]*", n), collapse = ""))[, -1])
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
# [1,] "13" "21" "56" "21" "" "" "15" "" "" "17" "01" "13"
# [2,] "13" "05" "25" "21" "01" "03" "15" "01" "02" "17" "11" "55"
# [3,] "13" "09" "18" "21" "" "" "15" "01" "04" "17" "01" "15"
, давая 3 * n
столбцы, а затем форматируем матрицу с помощью sprintf
:
matrix(sprintf(c("%02s", "%05s", "%06s"), t(M)), nrow = nrow(M), byrow = TRUE)
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
# [1,] "13" "00021" "000056" "21" "00000" "000000" "15" "00000" "000000" "17" "00001" "000013"
# [2,] "13" "00005" "000025" "21" "00001" "000003" "15" "00001" "000002" "17" "00011" "000055"
# [3,] "13" "00009" "000018" "21" "00000" "000000" "15" "00001" "000004" "17" "00001" "000015"