使用 Tidyr 将名称分隔到不同的列中

Separate a Name into Different Columns using Tidyr

这个问题是另一个 post 标题的扩展 - 将“姓名”分隔为数据框的“名字”和“姓氏”列 - 下面提供了数据框。

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

提供了一个很好的代码来展示如何使用 tidyr 将每个名字分成名字和姓氏。我遇到这样一种情况,名称由三部分组成,例如示例中提供的名称 - "Muhammad Arnab Halwai"。我相信下面的代码会将名称分隔为 "Muhammad" 和 "Arnab Halwai"。我正在尝试重新配置代码以创建 "Muhammad Arnab" 和 "Halwai"。

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

只需稍微调整正则表达式即可:

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