ifelse com várias condições

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"
participantes (1)
-
Fátima Lima Paula