Один вариант может быть case_when
для нескольких условий (хотя, в этом случае, есть и другие более простые варианты)
library(stringr)
library(dplyr)
df1 %>%
mutate(New = case_when(str_detect(columnA, "^G0") ~
str_sub(columnA, 3, 6), TRUE ~ str_sub(columnA,2, 6)))
# columnA B100 Score Score2 New
#1 G01440100208022 10010208022 35 2 1440
#2 G01330100208023 10010208023 61 4 1330
#3 G01090100208024 10010208024 48 2 1090
#4 G01007300129114 10730129114 13 1 1007
#5 G62117300129121 10730129121 74 6 62117
#6 G72007300129122 10730129122 63 4 72007
Или более простым вариантом является захват 5 цифр после 'G', а затем преобразовать в numeric
, так что 0 в начале будут сброшены
df1 %>%
mutate(New = as.integer( sub("^G(\\d{5}).*", "\\1", columnA)))
# columnA B100 Score Score2 New
#1 G01440100208022 10010208022 35 2 1440
#2 G01330100208023 10010208023 61 4 1330
#3 G01090100208024 10010208024 48 2 1090
#4 G01007300129114 10730129114 13 1 1007
#5 G62117300129121 10730129121 74 6 62117
#6 G72007300129122 10730129122 63 4 72007
Или просто с помощью base R
as.integer( sub("^G(\\d{5}).*", "\\1", df1$columnA))
#[1] 1440 1330 1090 1007 62117 72007
Или с помощью substr
as.integer(substr(df1$columnA, 2, 6))
data
df1 <- structure(list(columnA = c("G01440100208022", "G01330100208023",
"G01090100208024", "G01007300129114", "G62117300129121", "G72007300129122"
), B100 = c(10010208022, 10010208023, 10010208024, 10730129114,
10730129121, 10730129122), Score = c(35L, 61L, 48L, 13L, 74L,
63L), Score2 = c(2L, 4L, 2L, 1L, 6L, 4L)), class = "data.frame",
row.names = c(NA,
-6L))