Separa primeiro e último nome

Prezados, tenho uma coluna com nomes completos. Existe uma forma de separar o nome em 3 colunas: uma com primeiro nome, uma com nome do meio e uma com último nome? Obrigada Fátima

Tem sim, tudo depende do padrão apresentado. Todos os nomes são compostos por 3 partes? Bem, á pra usar a função strsplit() e quebrar no espaço em branco, o resultado é uma lista. Um probleminha surge com nomes que tem "da", "do", "das", "dos", "de" (da Silva, dos Santos, de Oliveira, do Nascimento, das Flores), mas pode ser revolvido. Veja nomes <- c("Antonio Teixeira Batista", "Suellen Cristina Albuquerque", "Paulo Matias dos Santos") # separa pelo espaço x1 <- strsplit(nomes, split=" ") x1 # junta o meio sapply(x1, function(i){ n <- length(i) c(i[1], paste(i[2:(n-1)], collapse=" "), i[n]) }) À disposição. Walmes. ========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br skype: walmeszeviani twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================

Caro Walmes. Na verdade esqueci de dizer que quero criar colunas no meu data frame com primeiro nome, nome do meio e último nome para depois usar o RecordLinkage. Agradeço muito o passo a passo para separar, vou testar. Mas, como faço para criar automaticamente as colunas respectivas. Será que me fiz entender? Obrigada. Fátima Em 26 de outubro de 2012 17:15, Walmes Zeviani <walmeszeviani@gmail.com>escreveu:
Tem sim, tudo depende do padrão apresentado. Todos os nomes são compostos por 3 partes? Bem, á pra usar a função strsplit() e quebrar no espaço em branco, o resultado é uma lista. Um probleminha surge com nomes que tem "da", "do", "das", "dos", "de" (da Silva, dos Santos, de Oliveira, do Nascimento, das Flores), mas pode ser revolvido. Veja
nomes <- c("Antonio Teixeira Batista", "Suellen Cristina Albuquerque", "Paulo Matias dos Santos")
# separa pelo espaço x1 <- strsplit(nomes, split=" ") x1
# junta o meio sapply(x1, function(i){ n <- length(i) c(i[1], paste(i[2:(n-1)], collapse=" "), i[n]) })
À disposição. Walmes.
========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br skype: walmeszeviani twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================
_______________________________________________ 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.

Olá Fátima, vc pode enviar um CRM? que te ajudo. Att Alisson Lucrécio da Costa ________________________________ From: Fátima Lima Paula <fatima.lima.paula@gmail.com> To: r-br@listas.c3sl.ufpr.br Sent: Friday, October 26, 2012 5:29 PM Subject: Re: [R-br] Separa primeiro e último nome Caro Walmes. Na verdade esqueci de dizer que quero criar colunas no meu data frame com primeiro nome, nome do meio e último nome para depois usar o RecordLinkage. Agradeço muito o passo a passo para separar, vou testar. Mas, como faço para criar automaticamente as colunas respectivas. Será que me fiz entender? Obrigada. Fátima Em 26 de outubro de 2012 17:15, Walmes Zeviani <walmeszeviani@gmail.com> escreveu: Tem sim, tudo depende do padrão apresentado. Todos os nomes são compostos por 3 partes? Bem, á pra usar a função strsplit() e quebrar no espaço em branco, o resultado é uma lista. Um probleminha surge com nomes que tem "da", "do", "das", "dos", "de" (da Silva, dos Santos, de Oliveira, do Nascimento, das Flores), mas pode ser revolvido. Veja
nomes <- c("Antonio Teixeira Batista", "Suellen Cristina Albuquerque", "Paulo Matias dos Santos")
# separa pelo espaço x1 <- strsplit(nomes, split=" ") x1
# junta o meio sapply(x1, function(i){ n <- length(i) c(i[1], paste(i[2:(n-1)], collapse=" "), i[n]) })
À disposição. Walmes.
========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br skype: walmeszeviani twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/%7Ewalmes linux user number: 531218 ==========================================================================
_______________________________________________ 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.
_______________________________________________ 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.

Fátima, Com expressões regulares fica mais simples (roubei os mesmos nomes do CMR do Walmes) nomes <- c("Antonio Teixeira Batista", "Suellen Cristina Albuquerque", "Paulo Matias dos Santos") expressao <- '^([^ ]+).* ([^ ]+)$' PrimeiroNome <- gsub(expressao, '\\1', nomes) UltimoNome <- gsub(expressao, '\\2', nomes) (Nomes <- data.frame(completo = nomes, primeiro = PrimeiroNome, ultimo = UltimoNome)) Testa aí e vê se isso resolve. Em 27 de outubro de 2012 00:01, Alisson Lucrecio <alissonluc@yahoo.com.br>escreveu:
Olá Fátima, vc pode enviar um CRM? que te ajudo. Att Alisson Lucrécio da Costa ------------------------------ *From:* Fátima Lima Paula <fatima.lima.paula@gmail.com> *To:* r-br@listas.c3sl.ufpr.br *Sent:* Friday, October 26, 2012 5:29 PM *Subject:* Re: [R-br] Separa primeiro e último nome
Caro Walmes. Na verdade esqueci de dizer que quero criar colunas no meu data frame com primeiro nome, nome do meio e último nome para depois usar o RecordLinkage.
Agradeço muito o passo a passo para separar, vou testar. Mas, como faço para criar automaticamente as colunas respectivas. Será que me fiz entender? Obrigada. Fátima
Em 26 de outubro de 2012 17:15, Walmes Zeviani <walmeszeviani@gmail.com>escreveu:
Tem sim, tudo depende do padrão apresentado. Todos os nomes são compostos por 3 partes? Bem, á pra usar a função strsplit() e quebrar no espaço em branco, o resultado é uma lista. Um probleminha surge com nomes que tem "da", "do", "das", "dos", "de" (da Silva, dos Santos, de Oliveira, do Nascimento, das Flores), mas pode ser revolvido. Veja
nomes <- c("Antonio Teixeira Batista", "Suellen Cristina Albuquerque", "Paulo Matias dos Santos")
# separa pelo espaço x1 <- strsplit(nomes, split=" ") x1
# junta o meio sapply(x1, function(i){ n <- length(i) c(i[1], paste(i[2:(n-1)], collapse=" "), i[n]) })
À disposição. Walmes.
========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br skype: walmeszeviani twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/%7Ewalmes
linux user number: 531218 ==========================================================================
_______________________________________________ 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.
_______________________________________________ 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.
_______________________________________________ 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.

Vou dar um exemplo fictício, ok? Tenho um data frame chamado tese com as seguintes variáveis: nome, data da internação, data da alta, idade. O nome vem completo. Quero fazer um linkage para verificar quem reinternou. Para isso, pelo que eu entendi, para usar o RecordLinkage vou precisar um data frame com colunas com o primeiro nome, nome do meio e último nome. Vamos ver um exemplo: nome data da internação data da alta idade Maria José Pereira 20080506 20080606 79 Rodrigo de Souza Matos 20080103 20080109 80 Márcia da Silva 20080304 20090305 68 Preciso que meu data frame fique assim: nome data da internação data da alta idade nome1 nome2 nome3 Maria José Pereira 20080506 20080606 79 Maria José Pereira Rodrigo de Souza Matos 20080103 20080109 80 Rodrigo de Souza Matos Márcia da Silva 20080304 20090305 68 Márcia da Teixeira O que eu fiz foi: library(stringr) separado=strsplit(as.character(teste$nome),split=" ") fa=sapply(separado, function(i){ n=length(i) c(i[1],paste(i[2:(n-1)],collapse=" "), i[n]) }) O aspecto do "fa" ficou assim: fa[,1:3] [,1] [,2] [,3] [1,] "Maria" "Rodrigo" "Márcia" [2,] "José" "de Souza" "da" [3,] "Pereira" "Matos" "Silva" Como você vê, ele retorna uma matriz cujas colunas são as linhas do outro data frame e as linhas são as colunas que eu queria criar no data frame. Espero que tenha conseguido ser clara. Obrigada. Fátima Em 27 de outubro de 2012 00:58, Lucas Cusinato <lucasbcr@gmail.com>escreveu:
Fátima,
Com expressões regulares fica mais simples (roubei os mesmos nomes do CMR do Walmes)
nomes <- c("Antonio Teixeira Batista", "Suellen Cristina Albuquerque", "Paulo Matias dos Santos")
expressao <- '^([^ ]+).* ([^ ]+)$'
PrimeiroNome <- gsub(expressao, '\\1', nomes) UltimoNome <- gsub(expressao, '\\2', nomes)
(Nomes <- data.frame(completo = nomes, primeiro = PrimeiroNome, ultimo = UltimoNome))
Testa aí e vê se isso resolve. Em 27 de outubro de 2012 00:01, Alisson Lucrecio <alissonluc@yahoo.com.br>escreveu:
Olá Fátima, vc pode enviar um CRM? que te ajudo.
Att Alisson Lucrécio da Costa ------------------------------ *From:* Fátima Lima Paula <fatima.lima.paula@gmail.com> *To:* r-br@listas.c3sl.ufpr.br *Sent:* Friday, October 26, 2012 5:29 PM *Subject:* Re: [R-br] Separa primeiro e último nome
Caro Walmes. Na verdade esqueci de dizer que quero criar colunas no meu data frame com primeiro nome, nome do meio e último nome para depois usar o RecordLinkage.
Agradeço muito o passo a passo para separar, vou testar. Mas, como faço para criar automaticamente as colunas respectivas. Será que me fiz entender? Obrigada. Fátima
Em 26 de outubro de 2012 17:15, Walmes Zeviani <walmeszeviani@gmail.com>escreveu:
Tem sim, tudo depende do padrão apresentado. Todos os nomes são compostos por 3 partes? Bem, á pra usar a função strsplit() e quebrar no espaço em branco, o resultado é uma lista. Um probleminha surge com nomes que tem "da", "do", "das", "dos", "de" (da Silva, dos Santos, de Oliveira, do Nascimento, das Flores), mas pode ser revolvido. Veja
nomes <- c("Antonio Teixeira Batista", "Suellen Cristina Albuquerque", "Paulo Matias dos Santos")
# separa pelo espaço x1 <- strsplit(nomes, split=" ") x1
# junta o meio sapply(x1, function(i){ n <- length(i) c(i[1], paste(i[2:(n-1)], collapse=" "), i[n]) })
À disposição. Walmes.
========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br skype: walmeszeviani twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/%7Ewalmes
linux user number: 531218 ==========================================================================
_______________________________________________ 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.
_______________________________________________ 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.
_______________________________________________ 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.
_______________________________________________ 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.

É só transpor o resultado t(fa) À disposição. Walmes. ========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br skype: walmeszeviani twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================

Walmes, acho que o Alysson respondeu minha pergunta. Vou tentar e qualquer coisa retorno. Desculpe e obrigada. Fátima Em 26 de outubro de 2012 17:15, Walmes Zeviani <walmeszeviani@gmail.com>escreveu:
Tem sim, tudo depende do padrão apresentado. Todos os nomes são compostos por 3 partes? Bem, á pra usar a função strsplit() e quebrar no espaço em branco, o resultado é uma lista. Um probleminha surge com nomes que tem "da", "do", "das", "dos", "de" (da Silva, dos Santos, de Oliveira, do Nascimento, das Flores), mas pode ser revolvido. Veja
nomes <- c("Antonio Teixeira Batista", "Suellen Cristina Albuquerque", "Paulo Matias dos Santos")
# separa pelo espaço x1 <- strsplit(nomes, split=" ") x1
# junta o meio sapply(x1, function(i){ n <- length(i) c(i[1], paste(i[2:(n-1)], collapse=" "), i[n]) })
À disposição. Walmes.
========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br skype: walmeszeviani twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================
_______________________________________________ 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.

Caro Walmes, Executei seu passo a passo. O problema é que quando crio o x1 encontro um problema: meu data frame tem 2738 linhas e algumas colunas. Cada linha é um indivíduo cujo nome quero separar. Peguei só a coluna do nome e criei o x1, mas ele ficou com 3 linhas e 2378 colunas. Exemplo: [,1] [,2] [1,] Maria José [2,] José da Silva [3,] Silva Cardoso O que eu quero no final é que o x1 fique assim: Nome1 Nome2 Nome3 1 Maria José da Silva 2 José da Silva Cardoso para eu poder devolver para o data frame e ficar assim: Nome Nome1 Nome2 Nome3 1 Maria José da Silva Maria José da Silva 2 José da Silva Cardoso José da Silva Cardoso Obrigada Fátima Em 26 de outubro de 2012 17:15, Walmes Zeviani <walmeszeviani@gmail.com>escreveu:
Tem sim, tudo depende do padrão apresentado. Todos os nomes são compostos por 3 partes? Bem, á pra usar a função strsplit() e quebrar no espaço em branco, o resultado é uma lista. Um probleminha surge com nomes que tem "da", "do", "das", "dos", "de" (da Silva, dos Santos, de Oliveira, do Nascimento, das Flores), mas pode ser revolvido. Veja
nomes <- c("Antonio Teixeira Batista", "Suellen Cristina Albuquerque", "Paulo Matias dos Santos")
# separa pelo espaço x1 <- strsplit(nomes, split=" ") x1
# junta o meio sapply(x1, function(i){ n <- length(i) c(i[1], paste(i[2:(n-1)], collapse=" "), i[n]) })
À disposição. Walmes.
========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br skype: walmeszeviani twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================
_______________________________________________ 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.

Olá, vc nao colocou muito bem como quer fazer essa divisão, mas no caso se os nomes forem separados por uma "/" use esse script, mas se for outro separador é só fazer uma adaptação. Saudações Alisson Lucrécio da Costa library(stringr) df names3 <- str_split(df$names3, pattern="/") names3 <- do.call(rbind, names3) names3 <- data.frame(names3) names(names3)[which(names(names3) == "X1")] <- "names1" names(names3)[which(names(names3) == "X2")] <- "names2" names(names3)[which(names(names3) == "X3")] <- "names3" names3$id <- with(names, paste(names1, names2, names3, sep=".")) df2 <- cbind(names3, df[,-1]) ________________________________ From: Fátima Lima Paula <fatima.lima.paula@gmail.com> To: r-br@listas.c3sl.ufpr.br Sent: Friday, October 26, 2012 4:28 PM Subject: [R-br] Separa primeiro e último nome Prezados, tenho uma coluna com nomes completos. Existe uma forma de separar o nome em 3 colunas: uma com primeiro nome, uma com nome do meio e uma com último nome? Obrigada Fátima _______________________________________________ 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.
participantes (4)
-
Alisson Lucrecio
-
Fátima Lima Paula
-
Lucas Cusinato
-
Walmes Zeviani