Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 单独的;名称“;变成;“名字”;及;“姓氏”;数据帧列_R_Strsplit - Fatal编程技术网

R 单独的;名称“;变成;“名字”;及;“姓氏”;数据帧列

R 单独的;名称“;变成;“名字”;及;“姓氏”;数据帧列,r,strsplit,R,Strsplit,我正在努力弄清楚如何在一个数据帧中将一列“Name”拆分为同一数据帧中的另外两列FistName和LastName。挑战在于我的一些名字有几个姓。基本上,我想取第一个单词(或字符串的元素)并将其放在FirstName列中,然后将下面的所有文本(当然减去空格)放在LastName列中 这是我的数据帧“tteam” NAME1)sub data.frame(FirstName = sub(" .*", "", tteam$NAME), LastName = sub("^\\S

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

这是我的数据帧“tteam”

NAME1)sub

data.frame(FirstName = sub(" .*", "", tteam$NAME), 
           LastName = sub("^\\S* ", "", tteam$NAME),
           tteam[-1])

2)gsubfn::read.pattern
NAME中,您可以使用
extract
from
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
尝试:

或:

您可以使用包unglue:


我不认为你能把这个弄对。有些人有几个名字,有些人有几个姓氏,然后有一个叫做“中间名”的东西。我相信这篇文章应该会帮助你:注意,在现实世界中,这是一个毫无意义的练习——人们有多个名字或姓氏,把他们的姓氏放在第一位,姓氏放在第二位或第三位,我曾经听说过一个中国学生,他的三部分名字出现在学生档案数据库中,出现在所有6种可能的ABC排列中。名单上的姓氏也有一个“中间”名字。为了避免使用x[length(x)]。哎呀,我没有看到它,但是在tteamdesire中,中间的名字也与姓氏连接起来考虑
stru split(name,”,n=2)
from
stringr
非常感谢所有的提交。选择这个答案是因为它简单。现在工作。再次感谢!
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!
data.frame(FirstName = sub(" .*", "", tteam$NAME), 
           LastName = sub("^\\S* ", "", tteam$NAME),
           tteam[-1])
library(tteam)

cn <- c("FirstName", "LastName")
NAME <- as.character(tteam$NAME)

cbind( read.pattern(text = NAME, pattern = "^(\\S*) (.*)", col.names = cn), tteam[-1])
 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
> firstname = sapply(strsplit(NAME, ' '), function(x) x[1])
> firstname 
[1] "John"     "Peter"    "Jolie"    "Muhammad"

> lastname = sapply(strsplit(NAME, ' '), function(x) x[length(x)])
> lastname
[1] "Doe"          "Gynn"         "Hope-Douglas" "Halwai"      
> ll = strsplit(NAME, ' ')
> 
> firstname = sapply(ll, function(x) x[1])
> lastname = sapply(ll, function(x) x[length(x)])
> 
> firstname
[1] "John"     "Peter"    "Jolie"    "Muhammad"
> lastname
[1] "Doe"          "Gynn"         "Hope-Douglas" "Halwai"      
library(unglue)
unglue_unnest(tteam, NAME, "{FirstName} {LastName}")
#>        TITLE FirstName     LastName
#> 1  assistant      John          Doe
#> 2    manager     Peter         Gynn
#> 3  assistant     Jolie Hope-Douglas
#> 4 specialist  Muhammad Arnab Halwai