Вы хотите получить значения с плавающей точкой в начале строки, поэтому используйте
x <- c("33.72", "34.72", "35.72", "36.72", "37.72", "29.05", "30.05", "31.05", "32.05", "33.05",
"34.05", "35.05", "36.05", "37.05", "1.09 ", "2.09 ", "3.09 ", "4.09 ", "5.09 ", "6.09 ",
"7.09 ", "8.09 ", "9.09 ", "46.86", "1.9 y", "2.9 y", "3.9 y", "4.9 y", "5.9 y", "6.9 y")
as.double(sub("^(\\d+\\.\\d+).*", "\\1", x))
См. R демо онлайн и regex demo .
Подробности :
^
- начало строки (\\d+\\.\\d+)
- Группа захвата 1 (обозначается \1
из шаблона замены): 1 или более цифр, точка и затем 1+ цифр .*
- любые 0 или более символов, как можно больше.
ПРИМЕЧАНИЕ : Если могут быть числа и целые числа, используйте as.double(sub("^(\\d+(?:\\.\\d+)?).*", "\\1", x))
.
См. График регулярных выражений :
