[R-br] ifelse com várias condições

Fátima Lima Paula fatima.lima.paula em gmail.com
Domingo Maio 19 10:51:01 BRT 2013


Prezados, tenho um banco de dados como o abaixo.

nome=c("RICARDO CUNHA DA SILVA FILHO","MARIA DE ANDRADE","TEREZA PEREIRA
FILHA",
  "PEDRO ALVARENGA JR","JOSE BRAGANÇA ALMEIDA JR", "GERMANO LIMA BARROS")
idade=c(68,67,89,78,65,67)
ano=c(1944,1945,1923,1934,1947,1945)
dataint=c(20121004,20120907,20120703,20120301,20120805,20121209)
banco1=cbind(nome,sobrenome,idade,ano,dataint)
banco1=data.frame(banco1)
banco1


Separei os nomes em nome1 (primeiro nome), nome2 (nome do meio) e nome3
(último nome), dessa forma:

nome=banco1$nome
nome=gsub(" D(A|E|O)S? ", " ", nome)
separado=strsplit(as.character(nome), split=" ")
head(separado)
fa=sapply(separado,
          function(i){
            n=length(i)
            if(n>2) return(c(i[1], paste(i[2:(n-1)],collapse=" "), i[n]))
            if(n==2) return(c(i[1], NA, i[n]))
            if(n==1) return(c(i[1], NA, NA))
          })
nomenovo=t(fa)
head(nomenovo)
is.data.frame(nomenovo)
nomenovo=as.data.frame(nomenovo)
dim(nomenovo)
colnames(nomenovo)=c("nome1","nome2","nome3")
banco1=cbind(banco1,nomenovo)

Depois, vi que existem os apêndices dos nomes (Filho, Filha, Jr etc)
Preciso separar os apêndices em uma coluna diferente (nome4).
Pensei em criar uma coluna 4 em que tivesse os apêndices do nome3 e no
restante viesse NA. Não sei fazer isso.
Ainda assim, dessa forma não sei que solução dar para a coluna 3. Pois
essa, deveria ter os apêndices substituídos pelos últimos sobrenomes.
Minha ideia é:
1)separar o nome2 em 3 de novo assim:

nome=banco1$nome2
nome=gsub(" D(A|E|O)S? ", " ", nome)
separado=strsplit(as.character(nome), split=" ")
head(separado)
fa=sapply(separado,
          function(i){
            n=length(i)
            if(n>2) return(c(i[1], paste(i[2:(n-1)],collapse=" "), i[n]))
            if(n==2) return(c(i[1], NA, i[n]))
            if(n==1) return(c(i[1], NA, NA))
          })
nomenovo=t(fa)
head(nomenovo)
is.data.frame(nomenovo)
nomenovo=as.data.frame(nomenovo)
dim(nomenovo)
colnames(nomenovo)=c("nome6","nome7","nome8")
banco1=cbind(banco1,nomenovo)
 2)Onde for FILHO, JR etc no nome 3, substituir pelo nome8 quando ele não
for NA. Pois quando ele é NA, tem que substituir pelo nome6
Não sei se tem como fazer isso.
São muitas condições: se for FILHO em nome3 e NA em nome8, substituir por
nome6, se for FILHO em nome3 e != de NA em nome8 substituir por nome8. E o
pior, tem que fazer isso para FILHO, FILHA, JR etc
Alguém sabe fazer isso ou tem outra solução para o problema?
Obrigada
Fátima

-- 
"Minha felicidade depende da qualidade dos meus pensamentos"
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20130519/7360dfd1/attachment.html>


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