Менее элегантно, чем ответ Акруна, но в base
.
nums = c("one","two","three","four","five",
"six","seven","eight","nine","ten")
example_input <- paste0("I have ten apple and one orange")
aux = strsplit(example_input," ")[[1]]
aux[!is.na(match(aux,nums))]=na.omit(match(aux,nums))
example_output = paste(aux,collapse=" ")
example_output
[1] "I have 10 apple and 1 orange"
Сначала мы разбиваем пробелы, находим соответствующие числа и меняем их по позиции (совпадает с самим числом), а затем вставляем снова.