Мы можем использовать parse_number
из readr
в столбцах 'y', 'z', чтобы извлечь первый набор числовой подстроки
library(dplyr)
library(readr)
dat %>%
mutate_at(vars(y:z), list(~ parse_number(as.character(.))))
# d x y z
#1 1 0 4 15
#2 2 0 1 11
#3 3 1 1 8
#4 4 0 1 1
#5 5 2 1 8
#6 6 0 1 5
Или другой вариант - удалить подстроку из пробела, а затем преобразовать в numeric
library(stringr)
dat %>%
mutate_at(vars(y:z), list(~ as.numeric(str_remove(., "\\s+.*"))))
Или, используя base R
, мы удаляем пробел, за которым следуют другие символы, и преобразуем в числовые значения для столбцов, отличных от первого
dat[-1] <- lapply(dat[-1], function(x) as.numeric(sub("\\s+.*", "", x)))
данные
dat <- structure(list(d = 1:6, x = c(0L, 0L, 1L, 0L, 2L, 0L), y = structure(c(2L,
1L, 1L, 1L, 1L, 1L), .Label = c("1 Nationally Representative",
"4 California"), class = "factor"), z = structure(c(3L, 2L, 5L,
1L, 5L, 4L), .Label = c("1 ASDE 2014/01", "11 MSG 2016/04", "15 MSG 2017/11",
"5 MSG 2015/07", "8 MSG 2016/01"), class = "factor")), row.names = c(NA,
-6L), class = "data.frame")