我正在努力弄清楚如何在数据框中使用“名称”的单个列,将其拆分为同一数据框中的FistName和LastName的另外两列。挑战在于我的一些名字有几个姓氏。本质上,我想将第一个单词(或字符串的元素)放入FirstName列中,然后将所有后续文本(当然要减去空格)放入LastName列中。

这是我的DataFrame“团队”

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

我想要的输出是这样的:
FirstName <- c("John", "Peter", "Jolie", "Muhammad")
LastName <- c("Doe", "Gynn", "Hope-Douglas", "Arnab Halwai")
tteamdesire <- data.frame(FirstName, LastName, TITLE)

我尝试了以下代码来创建一个仅包含名称的新数据框,该数据框使我能够从第一列中提取名称。但是,我无法按任何顺序排列姓氏。
names <- tteam$NAME ##  puts full names into names vector
namesdf <- data.frame(do.call('rbind', strsplit(as.character(names),' ',fixed=TRUE)))
## splits out all names into a dataframe PROBLEM IS HERE!

最佳答案

您可以使用extract中的tidyr

 library(tidyr)
 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

09-11 18:13
查看更多