Разбить строку на 4 символа, разделенных запятой - PullRequest
2 голосов
/ 08 марта 2019

Мне нужно разбить символьную строку на группы из 4 символов справа от строки и разделить запятой.

Пример: "5707559" необходимо отображать как 0570,7559, добавляя начальный ноль, если строка является нечетным числом (3 символа).

Исходная строка (строка, которая должна быть отделена) имеет переменную длину из столбца данных:

    Strings  Fixed_Strings
    5707559  0570, 7559
    7502     7502
    302      0302

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

Вы можете попробовать это:

split_by_n <- function(string, n = 4) {
  missing_zeros_number <- (n - nchar(string)) %% n
  extended_string_with_zeros <- paste0(
    c(numeric(missing_zeros_number), string), 
    collapse = "")
  total_length <- nchar(extended_string_with_zeros)
  substring(
    extended_string_with_zeros, 
    seq(1, total_length, n), 
    seq(n, total_length, n)
   )
}
split_by_n("foo")
split_by_n("foobar")
# [1] "0foo"
# [1] "00fo" "obar"

Наконец, использовать для вектора:

lapply(c("foo", "foobar"), split_by_n)
#[[1]]
#[1] "0foo"
#
#[[2]]
#[1] "00fo" "obar"
0 голосов
/ 08 марта 2019
x = c("5707559", "7502", "302")
ngroup = 4
library(stringr)
y = str_pad(x, width = ngroup*ceiling(nchar(x)/ngroup), pad = "0")
sapply(y, function(s) {
    n = nchar(s)/ngroup
    paste(sapply(seq(n), function(i)
        substring(s, ngroup*i-(ngroup - 1), ngroup*i)), collapse = ",")
})
#   05707559        7502        0302 
#"0570,7559"      "7502"      "0302" 
...