【问题标题】:using gsub extract middle name from name column使用 gsub 从名称列中提取中间名
【发布时间】:2018-07-18 18:05:56
【问题描述】:

我想从包含中间名和名字的列中提取中间名。本质上,我想要第一个空格后的所有内容。第 2 行中的“Doe K”,但如果人只有名字,则没有条目(不包括第 4-6 行)。

以下数据

nm <- read.table(text = "
             names
             1 'Jack Daniels'
             2 'John Doe K'
             3 'Kelly Susan H'
             4 'Kevin'
             5 'John'
             6 'William'")

代码:

for (i in 1:nrow(nm))
  nm[i,'middle_name'] <- gsub(".*? (.+)","\\1",nm[i, 'names'])

预期结果:

   names         middle_name
1: Jack Daniels  Daniels
2: John Doe K    Doe K
3: Kelly Susan H Susan H
4: Kevin         NA
5: John          NA
6: William       NA

【问题讨论】:

  • 尝试nm$middle_name = sub("^\\S+\\s+(\\S.*)|.*", "\\1", nm$names),尽管您需要将空值替换为NA (nm$middle_name[nm$middle_name==""] &lt;- "NA")。

标签: r regex gsub


【解决方案1】:
> sub("\\w+\\b *", "", nm$names)
[1] "Daniels" "Doe K"   "Susan H" ""        ""        "" 

【讨论】:

    【解决方案2】:

    另一种选择:

    library(stringr)
    str_extract(nm$names, "(?<=\\s).*?$")
    [1] "Daniels" "Doe K"   "Susan H" NA        NA        NA
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-09
      • 1970-01-01
      • 1970-01-01
      • 2018-07-11
      • 1970-01-01
      • 2019-01-17
      • 2012-02-21
      相关资源
      最近更新 更多