I would like to
mutate
gr = rep(seq(1,2),each=3)
clas=c("A_1","A_2","A_3","A_4","A_5","A_6")
df <- data.frame(gr,clas)
> df
gr clas
1 1 A_1
2 1 A_2
3 1 A_3
4 2 A_4
5 2 A_5
6 2 A_6
match <- paste('_',seq(4,6),sep='')
df%>%
mutate(clas=ifelse(clas %in% match,paste('B',seq(1,3),sep='_'),clas))
gr clas
1 1 1
2 1 2
3 1 3
4 2 4
5 2 5
6 2 6
grepl
df%>%
mutate(clas=ifelse(clas==grepl(paste(match,collapse='|'),clas),paste('B',seq(1,3),sep='_'),clas))
gr clas
1 1 1
2 1 2
3 1 3
4 2 4
5 2 5
6 2 6
gr clas
1 1 A_1
2 1 A_2
3 1 A_3
4 2 B_1
5 2 B_2
6 2 B_3
clas
gr
clas
1 CD_1
2 X.2_2
3 K$2_3
4 12k3_4
5 .A_5
6 xy_6
clas
1 CD_1
2 X.2_2
3 K$2_3
4 12kB_4
5 .B_5
6 xB_6
Here is dplyr
solution:
df%>%group_by(gr)%>%dplyr::mutate(clas=paste0(toupper(letters[gr]),"_",row_number()))
#you can change toupper(letters[gr]) to LETTERS[gr]
# A tibble: 6 x 2
# Groups: gr [2]
gr clas
<int> <chr>
1 1 A_1
2 1 A_2
3 1 A_3
4 2 B_1
5 2 B_2
6 2 B_3