Пример данных:
a <- paste0("-", 1:4)
a
#[1] "-1" "-2" "-3" "-4"
Преобразование имени
b <- paste0("STR_PP00", sapply(strsplit(a, "-"),"[[", 2))
b
#[1] "STR_PP001" "STR_PP002" "STR_PP003" "STR_PP004"
По сути, этот фрагмент кода делится на "-" где вывод strsplit()
является списком. Затем мы используем sapply()
, чтобы выбрать второй элемент каждого вектора в нашем списке. После этого можно использовать paste0()
, чтобы склеить извлеченный номер и префикс, который вы хотите.
Обновление, чтобы также соответствовать более высоким идентификаторам
a <- paste0("-", 1:128)
b <- "STR_PP"
# Amount of zeros required, -1 because of the "-" that is counted in nchar()
# -3 becasue the maximum length is 3 for id > 99 and times -1 because we
# want positive numbers
zerolen <- ((nchar(a) - 1) - 3) * (-1)
# Now one can add the amount of required 0 based on the length of ID number
c <- sapply(zerolen, function(x){
paste(as.character((rep(0, x))), collapse = "")
})
# Again combine with paste()
paste0(b, c, sapply(strsplit(a, "-"),"[[", 2))
# Which results in:
head(paste0(b, c, sapply(strsplit(a, "-"),"[[", 2)), 20)
# [1] "STR_PP001" "STR_PP002" "STR_PP003" "STR_PP004" "STR_PP005"
# "STR_PP006" "STR_PP007" "STR_PP008" "STR_PP009" "STR_PP010"
# [11] "STR_PP011" "STR_PP012" "STR_PP013" "STR_PP014" "STR_PP015"
# "STR_PP016" "STR_PP017" "STR_PP018" "STR_PP019" "STR_PP020"