
Wagner, bom dia! Tentei melhorar um pouco o script, tendo em mente os comentários do colega Cesar Rabak. Considerei apenas os sobrenomes de língua portuguesa, mas com um pouco de trabalho dá pra estender para outras línguas ("Alexander *von *Humboldt", "Johannes Diderik *van der* Waals", "Giuseppe *Della *Rosa", etc.) ### <code r> names <- c("Antônio João dos Santos", "Antônio Souza Brás Filho", "Bento Munhoz Rocha Souza", "Carlos Henrique Souza Sobrinho Neto", "Damasceno de Souza", "Eustácio da Silva Lima", "Fábio Pereira", "Gustavo de Araújo Junior"); names composite <- c("Junior", "Júnior", "Filho", "Neto", "Sobrinho") composite <- paste(composite, collapse="|") ### Marcando nomes compostos com uso de hífen names2 <- names names2 <- gsub(paste0(" (", composite, ")"), "-\\1", names2) names2 <- gsub(" (d.?.) ", " \\1-", names2) names2 split <- strsplit(names2, ' ') terms <- unlist(lapply(split, length)); terms n <- length(terms) sapply(1:n, function(x) split[[x]][1]) # Primeiro sapply(1:n, function(x) split[[x]][terms[x]]) # Último sapply(1:n, function(x) paste(split[[x]][-c(1,terms[x])], collapse=" ")) # Intermediários sapply(1:n, function(x) (split[[x]][-c(1,terms[x])])[1]) # Segundo nome... ### Removendo os hífens split2 <- lapply(split, function(x) gsub("-", " ", x)) sapply(1:n, function(x) split2[[x]][terms[x]]) # Último ### Removendo c("da", "de", "dos") split3 <- lapply(split2, function(x) gsub("^d.?. ", "", x)) sapply(1:n, function(x) split3[[x]][terms[x]]) # Último ### </code> ================================================ Éder Comunello Agronomist (UEM), MSc in Environ. Sciences (UEM) DSc in Agricultural Systems Engineering (USP/Esalq) Brazilian Agricultural Research Corporation (Embrapa) Dourados, MS, Brazil |<O>| ================================================ GEO, -22.2752, -54.8182, 408m UTC-04:00 / DST: UTC-03:00