Вам не хватает .
, используйте _.*
.Поскольку _*
соответствует нулю или большему количеству подчеркиваний, уведомление *
является квантификатором, который указывает количество прямого вышеуказанного символа;в то время как _.*
соответствует подчеркиванию, а затем все после .*
, поскольку .
соответствует общему символу;
df %>% mutate(new_a = str_replace(a, '_.*', as.character(b)))
# a b new_a
#1 a_1 1 a1
#2 b_1 2 b2
#3 b_2 3 b3
#4 b_3 4 b4
#5 c_1 5 c5
Или, если вы просто хотите удалить завершающую часть:
df %>% mutate(new_a = str_replace(a, '_.*', ''))
# a b new_a
#1 a_1 1 a
#2 b_1 2 b
#3 b_2 3 b
#4 b_3 4 b
#5 c_1 5 c