[R-br] Separa primeiro e último nome

Fátima Lima Paula fatima.lima.paula em gmail.com
Sábado Outubro 27 09:11:22 BRST 2012


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 em 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 em 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 em gmail.com>
>> *To:* r-br em 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 em 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 em ufpr.br
>> skype: walmeszeviani
>> twitter: @walmeszeviani
>> homepage: http://www.leg.ufpr.br/%7Ewalmes
>>
>> linux user number: 531218
>> ==========================================================================
>>
>> _______________________________________________
>> R-br mailing list
>> R-br em 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 em 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 em 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 em 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.
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20121027/0a828efd/attachment.html>


Mais detalhes sobre a lista de discussão R-br