我需要从混合格式的名字中分离出姓氏。
df <- data.frame(id = c(1,2,3,4,5),
name = c("Jack Smith", "May, Flora", "Jackson","Baker, Gavin","Walls"))
> df
id name
1 1 Jack Smith
2 2 May, Flora
3 3 Jackson
4 4 Baker, Gavin
5 5 Walls
我只需要提取姓氏。对于第一行,姓氏是Smith
。对于第二行,姓氏是May
,对于第三行,姓氏是Jackson
。我如何创建姓氏列,如下所示?
> df
id name last_name
1 1 Jack Smith Smith
2 2 May, Flora May
3 3 Jackson Jackson
4 4 Baker, Gavin Baker
5 5 Walls Walls
7条答案
按热度按时间drnojrws1#
如果你假设当逗号出现时,姓氏是第一个单词,并且这个人只有一个姓氏,并且它出现在最后,那么这样做:
您将获得:
如果有逗号,从逗号开始用空字符串替换。如果没有逗号,则抓取最后一个单词作为姓氏。
mkh04yzy2#
使用
gsub
生成统一格式的名称的基本R选项1yjd4xko3#
你可以尝试使用正则表达式的组合。第一个删除逗号右边的所有字符。第二个删除大写字母后面的空格前面的所有字母字符。
czq61nw14#
基地R路:
sqserrrh5#
我们可以使用
stringr::str_extract
和if_else
:lkaoscv76#
这里有一个
tidyverse
解决方案,它做了一些一般性的假设--真实的数据可能比示例数据更混乱:nxagd54h7#
试试看