Вы можете легко адаптировать шаблон, используемый в регулярном выражении, так, чтобы он совпадал либо с запятой, за которой следуют 0+ пробелов или 1+ пробелов:
names <- strsplit(names, ",\\s*|\\s+")
matrix(unlist(names), ncol=2, byrow = TRUE)
# [,1] [,2]
#[1,] "Baker" "Chet"
#[2,] "Jarret" "Keith"
#[3,] "Miles" "Davis"
Поскольку желаемый результат отличается отПервоначально описано, вот другой подход:
names <- strsplit(names, ",\\s*")
data.frame(name = sapply(names, function(x) paste(rev(x), collapse = " ")))
# name
#1 Chet Baker
#2 Keith Jarret
#3 Miles Davis
Другой вариант, используя группы перехвата в регулярном выражении, чтобы поменять все перед запятой на все после запятой и заменить запятую пробелом.
names <- c("Baker, Chet", "Jarret, Keith", "Miles Davis")
sub("([^,]+),\\s*([^,]+)$", "\\2 \\1", names)
#[1] "Chet Baker" "Keith Jarret" "Miles Davis"