【发布时间】:2016-04-28 04:04:12
【问题描述】:
这个问题是另一篇题为 - 将“姓名”分为数据框的“名字”和“姓氏”列的另一篇文章的扩展 - 数据框如下所示。
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"), '(.+) (.+)')或separate(tteam, NAME, c("FirstName", "LastName"), ' (?=[^ ]+$)')即可获得所需的结果。不过,请检查您的数据;后缀或冠词(“戴高乐”)会破坏这种方法。