Один из вариантов - извлечь все числа и преобразовать их в матрицу, а затем выполнить расчет.
mat <- stringr::str_extract_all(df$H, "\\d+", simplify = TRUE)
as.numeric(mat[, 1]) * 30.48 + as.numeric(mat[, 2]) * 2.54
#[1] 187.96 177.80 165.10 154.94 165.10 162.56
, где mat
равно
# [,1] [,2]
#[1,] "6" "2"
#[2,] "5" "10"
#[3,] "5" "5"
#[4,] "5" "1"
#[5,] "5" "5"
#[6,] "5" "4"
Первый столбец - это футы, а второй - дюймы.
И просто для собственного любопытства я хотел решить эту проблему в базе R
sapply(strsplit(sub("(\\d+)'(\\d+).*", "\\1-\\2", df$H), "-"), function(x)
as.numeric(x[1]) * 30.48 + as.numeric(x[2]) * 2.54)
#[1] 187.96 177.80 165.10 154.94 165.10 162.56
Это следует аналогичной логике, которая извлекает 2 числа из строки, используя sub
, разделяет их, используя strsplit
, а затем для каждого из них преобразует их в числовые и выполняет вычисление.