
Olá pessoal, tudo bem ? Gostaria de um help, estou querendo separar os nomes pelo: primeiro, segundo e último nome de uma pessoa. Para separar o primeiro e o último, eu utilizo os respectivos comandos: banco$firstname = sapply(strsplit(banco$nome, ' '), function(x) x[1]) banco$lastname = sapply(strsplit(banco$nome, ' '), function(x) x[length(x)]) Gostaria de ter uma idéia para separar o segundo nome baseado nesses comandos, Obrigado e abs a todos, ----- Wagner S. Tassinari Departamento de Matemática Universidade Federal Rural do Rio de Janeiro. BR-465, Km 7 - Seropedica, RJ - Brasil CEP: 23890-000 Cel: (21) 96488-5982 (WhatsApp) Skype: wagner.tassinari wtassinari@gmail.com ----------------------------------------------------------------------

Wagner, bom dia! Segue uma ideia... ### <code r> names <- c("Antônio João Carneiro", "Antônio Souza Brás Silva", "Bento Munhoz Rocha Souza", "Carlos Henrique Omanneve", "Damasceno Quiley", "Eustácio Silva Lima", "Fábio Enolair", "Gustavo Byroleth") names2 <- strsplit(names, ' ') terms <- unlist(lapply(names2, length)); terms n <- length(terms) sapply(1:n, function(x) names2[[x]][1]) # Primeiro sapply(1:n, function(x) names2[[x]][terms[x]]) # Último sapply(1:n, function(x) paste(names2[[x]][-c(1,terms[x])], collapse=" ")) # Intermediários sapply(1:n, function(x) (names2[[x]][-c(1,terms[x])])[1]) # Segundo nome... ### </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 Em 15 de maio de 2016 06:55, Wagner Tassinari <wtassinari@gmail.com> escreveu:
Olá pessoal, tudo bem ?
Gostaria de um help, estou querendo separar os nomes pelo: primeiro, segundo e último nome de uma pessoa. Para separar o primeiro e o último, eu utilizo os respectivos comandos:
banco$firstname = sapply(strsplit(banco$nome, ' '), function(x) x[1]) banco$lastname = sapply(strsplit(banco$nome, ' '), function(x) x[length(x)])
Gostaria de ter uma idéia para separar o segundo nome baseado nesses comandos,
Obrigado e abs a todos, ----- Wagner S. Tassinari Departamento de Matemática Universidade Federal Rural do Rio de Janeiro. BR-465, Km 7 - Seropedica, RJ - Brasil CEP: 23890-000 Cel: (21) 96488-5982 (WhatsApp) Skype: wagner.tassinari wtassinari@gmail.com ----------------------------------------------------------------------
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Wagner, As premissas para essa sua ideia seriam que os nomes têm sempre "primeiro, segundo e último nome"? Não terá ninguém com "último nome" "Júnior", Filho, "Neto", ou "Sobrinho"? Quando um indivíduo tem prenome composto como "José Maria" ou "Pedro Paulo" esse segundo "prenome" seria contado como o segundo nome? Pessoas que tivessem mais de dois nomes de família, por exemplo Maria Luísa Lins do Prado" como seriam colocados no banco de dados? Aliás como ficam os sobrenomes que têm "de" na sua formação "da Silva", por exemplo? 2016-05-15 7:55 GMT-03:00 Wagner Tassinari <wtassinari@gmail.com>:
Olá pessoal, tudo bem ?
Gostaria de um help, estou querendo separar os nomes pelo: primeiro, segundo e último nome de uma pessoa. Para separar o primeiro e o último, eu utilizo os respectivos comandos:
banco$firstname = sapply(strsplit(banco$nome, ' '), function(x) x[1]) banco$lastname = sapply(strsplit(banco$nome, ' '), function(x) x[length(x)])
Gostaria de ter uma idéia para separar o segundo nome baseado nesses comandos,
Obrigado e abs a todos, ----- Wagner S. Tassinari Departamento de Matemática Universidade Federal Rural do Rio de Janeiro. BR-465, Km 7 - Seropedica, RJ - Brasil CEP: 23890-000 Cel: (21) 96488-5982 (WhatsApp) Skype: wagner.tassinari wtassinari@gmail.com ----------------------------------------------------------------------
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

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
participantes (3)
-
Cesar Rabak
-
Wagner Tassinari
-
Éder Comunello