使用gsub从名称列中提取中间名

时间:2018-07-18 18:05:56

标签: r regex gsub

我想从包含中间名和名字的列中提取中间名。本质上,我希望在第一个空格前获得所有内容。第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

2 个答案:

答案 0 :(得分:1)

> sub("\\w+\\b *", "", nm$names)
[1] "Daniels" "Doe K"   "Susan H" ""        ""        "" 

答案 1 :(得分:0)

另一个选择:

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