Вы можете использовать регулярное выражение для решения этой проблемы.Вот возможное решение, основанное на вашем примере:
library(stringr)
vec <- c(" Sample Size = 955", " Importance 0.861", " Value 0.475 ")
str_extract(string = vec, pattern = "[0-9]{1,}(\\.)?[0-9]{0,}")
[1] "955" "0.861" "0.475"
str_extract(string = vec, pattern = "[a-zA-Z]{1,}(\\s)?[a-zA-Z]{1,}")
[1] "Sample Size" "Importance" "Value"
Первое правило будет искать число с 1 или более цифрами, затем возможное .
и другое возможное число из 0 или более цифр.Аналогично, второе правило будет искать строку с 1 или более символами, за которой следует возможный пробел (\\s
) и другую возможную строку из 1 или более символов.
РЕДАКТИРОВАТЬ:
Что, если у вас есть несколько чисел в одной строке?
В этом случае, я думаю, лучший вариант - разбить каждый элемент, а затем применить функцию кполучить шаблон, который вы хотите.В качестве примера я добавил еще одну цифру к первой записи:
library(stringr)
vec <- c(" Sample Size = 955 95", " Importance 0.861", " Value 0.475 ")
vec_aux <- str_split(string = vec, pattern = " ")
f1 <- function(x) str_extract(string = x, pattern = "[0-9]{1,}(\\.)?[0-9]{0,}")
f2 <- function(x) str_extract(string = x, pattern = "[a-zA-Z]{1,}(\\s)?[a-zA-Z]{1,}")
out1 <- lapply(X = vec_aux, FUN = f1)
lapply(out1, function(x) x[!is.na(x)])
[[1]]
[1] "955" "95"
[[2]]
[1] "0.861"
[[3]]
[1] "0.475"
out2 <- lapply(X = vec_aux, FUN = f2)
lapply(out2, function(x) x[!is.na(x)])
[[1]]
[1] "Sample" "Size"
[[2]]
[1] "Importance"
[[3]]
[1] "Value"