Сначала избавьтесь от посторонних символов:
topct <- function(x) { as.numeric( sub("\\D*([0-9.]+)\\D*","\\1",x) )/100 }
my.data <- paste(seq(20)/2, "%", sep = "")
> topct( my.data )
[1] 0.005 0.010 0.015 0.020 0.025 0.030 0.035 0.040 0.045 0.050 0.055 0.060 0.065 0.070 0.075 0.080
[17] 0.085 0.090 0.095 0.100
(спасибо Павлу за данные в качестве примера).
Эта функция теперь обрабатывает: начальные нечисловые символы, завершающие не-числовые символы и оставляют в десятичной точке, если есть.