2016-04-28 1 views
-1

Этот вопрос является расширением другого сообщения под названием «Разделить» имя в столбцы «FirstName» и «LastName» фрейма данных - и фрейм данных представлен ниже.Разделите имя на разные столбцы, используя Tidyr

NAME <- c('John Doe','Peter Gynn','Jolie Hope-Douglas', 'Muhammad Arnab Halwai') 
TITLE <- c("assistant", "manager", "assistant", "specialist") 
tteam<- data.frame(NAME, TITLE) 

Хороший код был предоставлен, чтобы показать, как использовать tidyr отделить каждое имя в имени и фамилии. У меня есть ситуация, когда есть имена с тремя частями, такими как имя, приведенное в примере - «Мухаммад Арнаб Халвей». Я считаю, что приведенный ниже код отделяет это имя от «Мухаммада» и «Арнаб Халвей». Я пытаюсь переконфигурировать код, чтобы создать «Мухаммад Арнаб» и «Халвей».

library(tidyr) 
extract(tteam, NAME, c("FirstName", "LastName"), "([^ ]+) (.*)") 
+0

Вы можете получить желаемый результат только с 'экстрактом (tteam, NAME, с ("FirstName", "LastName")," (. +) (. +) ') 'или' separate (tteam, NAME, c ("FirstName", "LastName"),' (? = [^] + $) ') '. Проверьте свои данные; суффиксы или статьи («Шарль де Голль») нарушат этот подход. – alistaire

ответ

2

Просто надо перейти на регулярное выражение немного:

extract(tteam, NAME, c("FirstName", "LastName"), "(.*) ([^ ]+)$") 

#  FirstName  LastName  TITLE 
# 1   John   Doe assistant 
# 2   Peter   Gynn manager 
# 3   Jolie Hope-Douglas assistant 
# 4 Muhammad Arnab  Halwai specialist