【问题标题】:Extracting complex names with stringr str_extract R: dealing with "DE", "VAN"使用 stringr str_extract R 提取复杂名称:处理“DE”、“VAN”
【发布时间】:2019-07-25 10:19:33
【问题描述】:

我想处理来自数据框的复杂姓名和姓氏。

list <- c("DUPONT J", "DUPONT DE JEAN, V", "JEAN V Y","DE DUPONT Z V","DUPONT VAN RIVIERE Z")

因此,我只想要 [完整姓名] [空白] [姓氏第一个字母]:

list2 <- c('DUPONT J', 'DUPONT DE JEAN V',"JEAN V","DE DUPONT Z","DUPONT VAN RIVIERE Z")

我尝试使用 str_extract 函数,但名称中的“DE”或“VAN”在提取整个名称时遇到问题。

str_extract(temp1$value, "[A-Z]+\\s[A-Z]")

我认为正确的代码应该是: 1)识别第一个姓氏字母是什么 2)取第一个姓氏字母之前的所有内容。

【问题讨论】:

  • 我真的不明白你的逻辑。为什么要从 Jean V Y 中删除 Y 而从 Dupont Van Riviere Z 中删除任何内容?
  • 我不知道为什么,但在我的数据库中,有时他们会放一个姓氏的首字母,有时放两个。 “DUPONT VAN RIVIERE”是完整的姓氏,“Z”是姓氏的第一个字母。在“Jean V Y”中,“Jean”是姓氏,V是姓氏的第一个字母
  • “姓”和“姓”不是一回事吗?还是说“姓”时是指“名字/名字”

标签: r stringr


【解决方案1】:

任何更简单的方法可能是在字符串末尾查找两个重复的单个字符并删除第二个字符

gsub("(\\s\\w)\\s\\w$", "\\1", list)

输出还删除了逗号,这将使用单独的命令完成

gsub(",", "", gsub("(\\s\\w)\\s\\w$", "\\1", list))

[1] "DUPONT J" "DUPONT DE JEAN V" "JEAN V" "DE DUPONT Z" "DUPONT VAN RIVIERE Z"

【讨论】:

    猜你喜欢
    • 2022-01-18
    • 1970-01-01
    • 2018-06-04
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多