我拥有的2000个名字与“名字中间名姓氏”和“名字姓氏”混在一起。我的代码仅适用于具有中间名称的代码。请参阅玩具示例。
names <- c("SARAH AMY SMITH", "JACKY LEE", "LOVE JOY", "MONTY JOHN CARLO", "EVA LEE-YOUNG")
last.name <- gsub("[A-Z]+ [A-Z]*","\\", people.from.sg[,7])
last.name
是
“SMITH”“”“CARLO”“-YOUNG”
LOVE JOY
和JACKY lEE
没有任何结果。
p.s这不是重复的帖子,因为以前的帖子不使用gsub
答案 0 :(得分:3)
用空字符串将所有内容替换为最后一个空格。没有包使用。
sub(".* ", "", names)
## [1] "SMITH" "LEE" "JOY" "CARLO" "LEE-YOUNG"
注意:强>
关于下面关于两个单词姓氏的评论,这些姓氏似乎不是所述问题的一部分,但如果是,那么假设第一个单词是DEL或VAN。然后用冒号替换后面的空格,比如说,然后执行上面的sub
,然后将冒号恢复回空间。
names2 <- c("SARAH AMY SMITH", "JACKY LEE", "LOVE JOY", "MONTY JOHN CARLO",
"EVA LEE-YOUNG", "ARTHUR DEL GATO", "MARY VAN ALLEN") # test data
sub(":", " ", sub(".* ", "", sub(" (DEL|VAN) ", " \\1:", names2)))
## [1] "SMITH" "LEE" "JOY" "CARLO" "LEE-YOUNG" "DEL GATO"
## [7] "VAN ALLEN"
答案 1 :(得分:2)
或者,在最后一个空格(或最后一个
)之后提取所有内容library(stringr)
str_extract(names, '[^ ]+$')
# [1] "SMITH" "LEE" "JOY" "CARLO" "LEE-YOUNG"
或者,正如迈克克建议的那样,将字符串拆分为空格并使用最后一个字:
sapply(strsplit(names, " "), tail, 1)
# [1] "SMITH" "LEE" "JOY" "CARLO" "LEE-YOUNG"