Base R string functions cover most needs. paste() and paste0() concatenate; gsub()/sub() replace patterns; grep()/grepl() search; strsplit() splits. All are vectorised.
# Concatenate
paste("Gobio", "gobio") # "Gobio gobio" (space sep)
paste0("sample_", 1:3) # "sample_1" "sample_2" "sample_3"
paste(c("a","b","c"), collapse = "-") # "a-b-c"
# Case
toupper("hello"); tolower("WORLD")
# Pattern matching
x <- c("Gobio gobio", "Cottus sp.", "Leuciscus leuciscus")
grep("gobio", x) # index: 1
grepl("gobio", x) # logical: TRUE FALSE FALSE
grep("gobio", x, value = TRUE)
# Replace
gsub("_", " ", "Gobio_gobio") # "Gobio gobio"
sub("^(\\w+).*", "\\1", x) # extract genus
# Split / extract
strsplit("Gobio gobio", " ")[[1]] # "Gobio" "gobio"
substr("Gobio gobio", 1, 5) # "Gobio"
nchar(x) # string lengths