Manipulação de String

Pessoal, peço ajuda aos mestres em manipulação de String... eu ainda não me acertei com isso. A duvida é simples: x <- c("Eder David Borges da Silva","João Silva","Pedro Augusto Paulo") gostaria de transformar estes nomes em formato "Americano" ficando: Silva, Eder David Borges da Silva, João Paulo, Pedro Augusto. Em síntese pegar oque esta depois do ultimo espaço, e colar com tudo que esta antes dele, separando isso por uma virgula. Já tentei algumas coisa, mas sempre me confundo nas expressões regulares. Alguma dica? Obrigado

#dados x <- c("Eder David Borges da Silva","João Silva","Pedro Augusto Paulo") #quebrando os nomes, resultado numa lista lista<-strsplit(x," ") #tamanho da lista length(lista) #tamanho do nome length(lista[[1]]) #tres paste, dois dentro de um, colocando o nome com , dai o resto dos nomes juntos paste(paste(lista[[1]][length(lista[[1]])],",",collapse="",sep=""),paste(lista[[1]][1:(length(lista[[1]])-1)],collapse=" "),sep=" ") #crie um vetor pra guardar os nomes saida<-vector() #um loop para repetir a atividade acima for(i in 1:length(lista)) { saida[i]<-paste(paste(lista[[i]][length(lista[[i]])],",",collapse="",sep=""),paste(lista[[i]][1:(length(lista[[i]])-1)],collapse=" "),sep=" ") } #os nomes reorganizados saida Ai, pra ir quebrando o galho enquanto os mestres não vem hehe. Eu usei tres vezes o comando paste pra conseguir o resultado desejado, mas deve ter jeito de isso ser mais simples. Se for muito nome é melhor trocar o loop de for para um apply, so transformar isso numa função. Espero que ajude Em 13 de dezembro de 2012 11:58, Eder David Borges da Silva <eder@leg.ufpr.br> escreveu:
Pessoal, peço ajuda aos mestres em manipulação de String... eu ainda não me acertei com isso. A duvida é simples: x <- c("Eder David Borges da Silva","João Silva","Pedro Augusto Paulo") gostaria de transformar estes nomes em formato "Americano" ficando: Silva, Eder David Borges da Silva, João Paulo, Pedro Augusto. Em síntese pegar oque esta depois do ultimo espaço, e colar com tudo que esta antes dele, separando isso por uma virgula. Já tentei algumas coisa, mas sempre me confundo nas expressões regulares. Alguma dica? Obrigado
_______________________________________________ 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.
-- Grato Augusto C. A. Ribas Site Pessoal: http://recologia.wordpress.com/ Lattes: http://lattes.cnpq.br/7355685961127056

gsub ('^(.*) (.*) $', '\\2, \\1', x) On 13 Dec 2012 16:50, "Augusto Ribas" <ribas.aca@gmail.com> wrote:
#dados x <- c("Eder David Borges da Silva","João Silva","Pedro Augusto Paulo") #quebrando os nomes, resultado numa lista lista<-strsplit(x," ")
#tamanho da lista length(lista) #tamanho do nome length(lista[[1]])
#tres paste, dois dentro de um, colocando o nome com , dai o resto dos nomes juntos
paste(paste(lista[[1]][length(lista[[1]])],",",collapse="",sep=""),paste(lista[[1]][1:(length(lista[[1]])-1)],collapse=" "),sep=" ")
#crie um vetor pra guardar os nomes saida<-vector()
#um loop para repetir a atividade acima for(i in 1:length(lista)) {
saida[i]<-paste(paste(lista[[i]][length(lista[[i]])],",",collapse="",sep=""),paste(lista[[i]][1:(length(lista[[i]])-1)],collapse=" "),sep=" ") }
#os nomes reorganizados saida
Ai, pra ir quebrando o galho enquanto os mestres não vem hehe. Eu usei tres vezes o comando paste pra conseguir o resultado desejado, mas deve ter jeito de isso ser mais simples. Se for muito nome é melhor trocar o loop de for para um apply, so transformar isso numa função.
Espero que ajude
Em 13 de dezembro de 2012 11:58, Eder David Borges da Silva <eder@leg.ufpr.br> escreveu:
Pessoal, peço ajuda aos mestres em manipulação de String... eu ainda não me acertei com isso. A duvida é simples: x <- c("Eder David Borges da Silva","João Silva","Pedro Augusto Paulo") gostaria de transformar estes nomes em formato "Americano" ficando: Silva, Eder David Borges da Silva, João Paulo, Pedro Augusto. Em síntese pegar oque esta depois do ultimo espaço, e colar com tudo que esta antes dele, separando isso por uma virgula. Já tentei algumas coisa, mas sempre me confundo nas expressões regulares. Alguma dica? Obrigado
_______________________________________________ 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.
-- Grato Augusto C. A. Ribas
Site Pessoal: http://recologia.wordpress.com/ Lattes: http://lattes.cnpq.br/7355685961127056 _______________________________________________ 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.

Corretor burro gsub ('^(.*) (.*)$', '\\2, \\1', x) On 13 Dec 2012 16:56, "Benilton Carvalho" <beniltoncarvalho@gmail.com> wrote:
gsub ('^(.*) (.*) $', '\\2, \\1', x) On 13 Dec 2012 16:50, "Augusto Ribas" <ribas.aca@gmail.com> wrote:
#dados x <- c("Eder David Borges da Silva","João Silva","Pedro Augusto Paulo") #quebrando os nomes, resultado numa lista lista<-strsplit(x," ")
#tamanho da lista length(lista) #tamanho do nome length(lista[[1]])
#tres paste, dois dentro de um, colocando o nome com , dai o resto dos nomes juntos
paste(paste(lista[[1]][length(lista[[1]])],",",collapse="",sep=""),paste(lista[[1]][1:(length(lista[[1]])-1)],collapse=" "),sep=" ")
#crie um vetor pra guardar os nomes saida<-vector()
#um loop para repetir a atividade acima for(i in 1:length(lista)) {
saida[i]<-paste(paste(lista[[i]][length(lista[[i]])],",",collapse="",sep=""),paste(lista[[i]][1:(length(lista[[i]])-1)],collapse=" "),sep=" ") }
#os nomes reorganizados saida
Ai, pra ir quebrando o galho enquanto os mestres não vem hehe. Eu usei tres vezes o comando paste pra conseguir o resultado desejado, mas deve ter jeito de isso ser mais simples. Se for muito nome é melhor trocar o loop de for para um apply, so transformar isso numa função.
Espero que ajude
Em 13 de dezembro de 2012 11:58, Eder David Borges da Silva <eder@leg.ufpr.br> escreveu:
Pessoal, peço ajuda aos mestres em manipulação de String... eu ainda não me acertei com isso. A duvida é simples: x <- c("Eder David Borges da Silva","João Silva","Pedro Augusto Paulo") gostaria de transformar estes nomes em formato "Americano" ficando: Silva, Eder David Borges da Silva, João Paulo, Pedro Augusto. Em síntese pegar oque esta depois do ultimo espaço, e colar com tudo que esta antes dele, separando isso por uma virgula. Já tentei algumas coisa, mas sempre me confundo nas expressões regulares. Alguma dica? Obrigado
_______________________________________________ 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.
-- Grato Augusto C. A. Ribas
Site Pessoal: http://recologia.wordpress.com/ Lattes: http://lattes.cnpq.br/7355685961127056 _______________________________________________ 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.

Caros, Conheço materias de RegExp mas muito dispersos, portanto não saberia indicar algum. Alguém conhece algum material bom e relativamente completo sobre isso para indicar? abs 2012/12/13 Benilton Carvalho <beniltoncarvalho@gmail.com>
Corretor burro
gsub ('^(.*) (.*)$', '\\2, \\1', x) On 13 Dec 2012 16:56, "Benilton Carvalho" <beniltoncarvalho@gmail.com> wrote:
gsub ('^(.*) (.*) $', '\\2, \\1', x) On 13 Dec 2012 16:50, "Augusto Ribas" <ribas.aca@gmail.com> wrote:
#dados x <- c("Eder David Borges da Silva","João Silva","Pedro Augusto Paulo") #quebrando os nomes, resultado numa lista lista<-strsplit(x," ")
#tamanho da lista length(lista) #tamanho do nome length(lista[[1]])
#tres paste, dois dentro de um, colocando o nome com , dai o resto dos nomes juntos
paste(paste(lista[[1]][length(lista[[1]])],",",collapse="",sep=""),paste(lista[[1]][1:(length(lista[[1]])-1)],collapse=" "),sep=" ")
#crie um vetor pra guardar os nomes saida<-vector()
#um loop para repetir a atividade acima for(i in 1:length(lista)) {
saida[i]<-paste(paste(lista[[i]][length(lista[[i]])],",",collapse="",sep=""),paste(lista[[i]][1:(length(lista[[i]])-1)],collapse=" "),sep=" ") }
#os nomes reorganizados saida
Ai, pra ir quebrando o galho enquanto os mestres não vem hehe. Eu usei tres vezes o comando paste pra conseguir o resultado desejado, mas deve ter jeito de isso ser mais simples. Se for muito nome é melhor trocar o loop de for para um apply, so transformar isso numa função.
Espero que ajude
Em 13 de dezembro de 2012 11:58, Eder David Borges da Silva <eder@leg.ufpr.br> escreveu:
Pessoal, peço ajuda aos mestres em manipulação de String... eu ainda não me acertei com isso. A duvida é simples: x <- c("Eder David Borges da Silva","João Silva","Pedro Augusto Paulo") gostaria de transformar estes nomes em formato "Americano" ficando: Silva, Eder David Borges da Silva, João Paulo, Pedro Augusto. Em síntese pegar oque esta depois do ultimo espaço, e colar com tudo que esta antes dele, separando isso por uma virgula. Já tentei algumas coisa, mas sempre me confundo nas expressões regulares. Alguma dica? Obrigado
_______________________________________________ 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.
-- Grato Augusto C. A. Ribas
Site Pessoal: http://recologia.wordpress.com/ Lattes: http://lattes.cnpq.br/7355685961127056 _______________________________________________ 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.
-- Diogo Ferrari University of San Paulo (USP) Faculty of Philosophy, Languages, Literature and Human Sciences (FFLCH) Department of Political Science (DCP) San Paulo/SP - Brazil E-mail: diogo.ferrari@usp.br Open Source! Use R! Use Linux! "A vida é a arte de tirar conclusões suficientes de dados insuficientes"

Isso resolve, só não sei se há forma mais eficiente x <- c("Eder David Borges da Silva","João Silva","Pedro Augusto Paulo") last <- gsub(".* (.*)$", "\\1", x) remaider <- gsub("(.*) .*$", "\\1", x) paste(last, remaider, sep=", ") À 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 ==========================================================================

Nota mental: aprender a usar gsub []s Leonard de Assis http://about.me/ldeassis Em 13/12/2012 13:52, Walmes Zeviani escreveu:
Isso resolve, só não sei se há forma mais eficiente
x <- c("Eder David Borges da Silva","João Silva","Pedro Augusto Paulo") last <- gsub(".* (.*)$", "\\1", x) remaider <- gsub("(.*) .*$", "\\1", x) paste(last, remaider, sep=", ")
À 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 <mailto:walmes@ufpr.br> skype: walmeszeviani twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes <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.

Pessoal obrigado pelas soluções, mas tenho que tirar o meu chapeu para a do Benilton, isso é sacanagem......tenho que aprender essas expressões regulares urgentemente,,,, Valeu... Em 13 de dezembro de 2012 15:48, Leonard de Assis <assis.leonard@gmail.com>escreveu:
Nota mental: aprender a usar gsub
[]s Leonard de Assishttp://about.me/ldeassis
Em 13/12/2012 13:52, Walmes Zeviani escreveu:
Isso resolve, só não sei se há forma mais eficiente
x <- c("Eder David Borges da Silva","João Silva","Pedro Augusto Paulo") last <- gsub(".* (.*)$", "\\1", x) remaider <- gsub("(.*) .*$", "\\1", x) paste(last, remaider, sep=", ")
À 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 listR-br@listas.c3sl.ufpr.brhttps://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.
participantes (6)
-
Augusto Ribas
-
Benilton Carvalho
-
Diogo Ferrari
-
Eder David Borges da Silva
-
Leonard de Assis
-
Walmes Zeviani