使用R从全名中提取姓氏
Extract last name from a full name using R
我的2000个名字都是"first name middle name last name"和"first name last name"混在一起的。我的代码只适用于那些有中间名的人。请参阅玩具示例。
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 这不是重复的 post 因为前面的不使用 gsub
将最后 space 之前的所有内容替换为空字符串。没有使用包。
sub(".* ", "", names)
## [1] "SMITH" "LEE" "JOY" "CARLO" "LEE-YOUNG"
注:
关于下面关于两个词的姓氏的评论,这似乎不是问题的一部分,但如果是,那么假设第一个词是 DEL 或 VAN。然后用冒号替换其中任何一个之后的 space,比如说,然后执行上面的 sub
,然后将冒号恢复为 space.
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"
或者,提取最后一个 space(或最后一个
之后的所有内容
library(stringr)
str_extract(names, '[^ ]+$')
# [1] "SMITH" "LEE" "JOY" "CARLO" "LEE-YOUNG"
或者,正如 mikeck 所建议的那样,将字符串拆分为 spaces 并取最后一个词:
sapply(strsplit(names, " "), tail, 1)
# [1] "SMITH" "LEE" "JOY" "CARLO" "LEE-YOUNG"
我的2000个名字都是"first name middle name last name"和"first name last name"混在一起的。我的代码只适用于那些有中间名的人。请参阅玩具示例。
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 这不是重复的 post 因为前面的不使用 gsub
将最后 space 之前的所有内容替换为空字符串。没有使用包。
sub(".* ", "", names)
## [1] "SMITH" "LEE" "JOY" "CARLO" "LEE-YOUNG"
注:
关于下面关于两个词的姓氏的评论,这似乎不是问题的一部分,但如果是,那么假设第一个词是 DEL 或 VAN。然后用冒号替换其中任何一个之后的 space,比如说,然后执行上面的 sub
,然后将冒号恢复为 space.
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"
或者,提取最后一个 space(或最后一个
之后的所有内容library(stringr)
str_extract(names, '[^ ]+$')
# [1] "SMITH" "LEE" "JOY" "CARLO" "LEE-YOUNG"
或者,正如 mikeck 所建议的那样,将字符串拆分为 spaces 并取最后一个词:
sapply(strsplit(names, " "), tail, 1)
# [1] "SMITH" "LEE" "JOY" "CARLO" "LEE-YOUNG"