R паста после strsplit без дубликатов - PullRequest
1 голос
/ 23 марта 2019

У меня есть строка в R

myname <- "Peter del Soreno Garfias"

Я хочу избавиться от второго слова и хотел бы иметь в конце "Peter Soreno Garfias".

Так что я делаюa

strgSplitted <- unlist(strsplit(myname))

И соберите все вместе

nameShort <- paste0(strgSplitted[[1]]," ",strgSplitted[1:length(strgSplitted)]

Но я получаю

"Питер Сорено, Питер Гарфиас"

Как я могу получить

"Питер Сорено Гарфиас"

?

Лучший

Ответы [ 2 ]

1 голос
/ 23 марта 2019

Вы можете использовать strsplit и удалить 2-е слово

paste(unlist(strsplit(myname, " "))[-2], collapse = " ")
[1] "Peter Soreno Garfias"

Если это конкретное слово и не обязательно на 2-й позиции, то вы можете заменить его пробелом:

sub("del", "", myname)
[1] "Peter  Soreno Garfias"

Или сохраняйте слова только заглавными буквами

library(stringr)
paste(str_extract_all(myname, "\\b[A-Z]\\w+")[[1]], collapse = " ")
[1] "Peter Soreno Garfias"
0 голосов
/ 23 марта 2019

Вот более безопасный подход с использованием gsub:

myname <- "Peter del Soreno Garfias"
output <- gsub("\\s+[a-z]+\\s+", " ", myname)
output

[1] "Peter Soreno Garfias"

Логика здесь состоит в том, чтобы удалить любые промежуточные слова, в которых нет заглавных букв.

Если вы действительно хотите удалить второе слово из имени, мы также можем использовать sub для этого:

sub("^(\\S+)\\s+\\S+(.*)", "\\1\\2", myname)
[1] "Peter Soreno Garfias"
...