Я хотел бы разбить вектор символьных строк (имена людей) на два столбца (вектора). Проблема в том, что у некоторых людей фамилия состоит из двух слов. Я хочу разделить имя и фамилию на две колонки. Я могу вырезать и взять имена, используя приведенный ниже код, но фамилия ускользает от меня. (посмотрите на набл. 29 в приведенном ниже образце, чтобы понять, как у Ford есть «фамилия» Pantera L, которую нужно хранить вместе)
Что я пытался сделать до сих пор;
x<-rownames(mtcars)
unlist(strsplit(x, " .*"))
Что я ' Мне бы хотелось, чтобы это выглядело так:
MANUF MAKE
27 Porsche 914-2
28 Lotus Europa
29 Ford Pantera L
30 Ferrari Dino
31 Maserati Bora
32 Volvo 142E
Регулярному выражению rexp
соответствует слово в начале строки, необязательный пробел, а затем остальная часть строки. Скобки - это подвыражения, к которым обращаются в виде обратных ссылок \\1
и \\2
.
rexp <- "^(\\w+)\\s?(.*)$"
y <- data.frame(MANUF=sub(rexp,"\\1",x), MAKE=sub(rexp,"\\2",x))
tail(y)
# MANUF MAKE
# 27 Porsche 914-2
# 28 Lotus Europa
# 29 Ford Pantera L
# 30 Ferrari Dino
# 31 Maserati Bora
# 32 Volvo 142E
Если вы можете сделать сопоставление с образцом и группой, я бы попробовал что-то вроде этого (не проверено):
\s+(.*)\s+(.*)