【问题标题】:Separate a Name into Different Columns using Tidyr使用 Tidyr 将名称分成不同的列
【发布时间】: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"), ' (?=[^ ]+$)') 即可获得所需的结果。不过,请检查您的数据;后缀或冠词(“戴高乐”)会破坏这种方法。

标签: r tidyr


【解决方案1】:

只需稍微切换一下正则表达式:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-11
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    相关资源
    最近更新 更多