Tem o arquivo para rodar?






Oi pessoal, consegui resolver aqui. O Diego me ajudou.



O problema que estava enfrentando é que existia a repetição de IDs na minha 
base de dados. Por exemplo, o ID 2 se repetia 15 vezes. A solução foi criar um 
novo id que tenha a informação do antigo id e a identificação da unidade 
amostral dentro daquele id. Feito isso, foi utilizado o merge.





Basicamente foi feito o seguinte, parte da minha base de dados era desse jeito:





> head(dados)

  id var1 var2 var3     var4 var5       var6 var7       var8 var9

1  1   RJ   99    1 27.66667    2 15/12/2004    1 15/03/2005  358

2  2   RJ    1    1 35.32500    1 13/07/2001    1 27/02/2002  645

3  2   RJ    1    1 35.32500    1 13/07/2001    1 06/11/2007   73

4  2   RJ    1    1 35.32500    1 13/07/2001    1 03/12/2007  162

5  2   RJ    1    1 35.32500    1 13/07/2001    1 02/07/2002  546

6  2   RJ    1    1 35.32500    1 13/07/2001    1 06/12/2002  542





> head(dados1)

  id    var10

1  1 3.031408

2  2 4.710963

3  2 4.262451

4  2 5.334454

5  2 4.718502

6  2 4.413300





> dim(dados)

[1] 2074   10



> dim(dados1)

[1] 1782    2



O que queria é juntar essas duas bases, só que são de dimensões diferentes. O 
grande problema seria na repetição de IDs, pois somente o merge não ajudaria. 
Então a solução do Diego foi fazer o seguinte:



n.dados <- numeric(dim(dados)[1])

n.dados[1] <- 1

for(i in 2:dim(dados)[1]) {

  n.dados[i] <- ifelse(test = dados[(i - 1), 'id'] == dados[i, 'id'], yes = 
n.dados[i - 1] + 1, no = 1)

}



n.dados1 <- numeric(dim(dados1)[1])

n.dados1[1] <- 1

for(i in 2:dim(dados1)[1]) {

  n.dados1[i] <- ifelse(test = dados1[(i - 1), 'id'] == dados1[i, 'id'], yes = 
n.dados1[i - 1] + 1, no = 1)

}



ID <- paste0(formatC(dados[, 'id'], width = 4, flag = '0'), formatC(n.dados, 
width = 2, flag = '0'))

DADOS <- cbind(ID, dados)



ID <- paste0(formatC(dados1[, 'id'], width = 4, flag = '0'), formatC(n.dados1, 
width = 2, flag = '0'))

DADOS1 <- cbind(ID, dados1)









Rodando o script acima, a base de dados ficou da seguinte forma:



> head(DADOS)

      ID id var1 var2 var3     var4 var5       var6 var7       var8 var9

1 000101  1   RJ   99    1 27.66667    2 15/12/2004    1 15/03/2005  358

2 000201  2   RJ    1    1 35.32500    1 13/07/2001    1 27/02/2002  645

3 000202  2   RJ    1    1 35.32500    1 13/07/2001    1 06/11/2007   73

4 000203  2   RJ    1    1 35.32500    1 13/07/2001    1 03/12/2007  162

5 000204  2   RJ    1    1 35.32500    1 13/07/2001    1 02/07/2002  546

6 000205  2   RJ    1    1 35.32500    1 13/07/2001    1 06/12/2002  542





> head(DADOS1)

      ID id    var10

1 000101  1 3.031408

2 000201  2 4.710963

3 000202  2 4.262451

4 000203  2 5.334454

5 000204  2 4.718502

6 000205  2 4.413300





Utilizando o merge:



k<-merge(x = DADOS, y = DADOS1, by = 'ID', all.y = TRUE)



head(k)

      ID id.x var1 var2 var3     var4 var5       var6 var7       var8 var9 id.y 
   var10

1 000101    1   RJ   99    1 27.66667    2 15/12/2004    1 15/03/2005  358    1 
3.031408

2 000201    2   RJ    1    1 35.32500    1 13/07/2001    1 27/02/2002  645    2 
4.710963

3 000202    2   RJ    1    1 35.32500    1 13/07/2001    1 06/11/2007   73    2 
4.262451

4 000203    2   RJ    1    1 35.32500    1 13/07/2001    1 03/12/2007  162    2 
5.334454

5 000204    2   RJ    1    1 35.32500    1 13/07/2001    1 02/07/2002  546    2 
4.718502

6 000205    2   RJ    1    1 35.32500    1 13/07/2001    1 06/12/2002  542    2 
4.413300











Agradeço à todos pela ajuda e atenção.





Grande abraço e ótima semana,







Victor Eduardo



Em 16 de maio de 2015 14:53, Paulo Abreu <[email protected]> escreveu:

Victor,



Manda seu código que fica mais fácil da gente ver o que pode ter dado errado.



Em 16/05/2015, à(s) 14:38, Paulo Dick <[email protected]> escreveu:



Olá Victor,

Veja se os valores no id nas duas está no mesmo formato, talvez um maiúsculo ou 
minúsculo diferente pode fazer com que ele não case as informações direito.


Em sábado, 16 de maio de 2015, Victor Eduardo <[email protected]> escreveu:

Oi Diego, eu tentei isso, e ele simplesmente aumenta o número de linhas. Sobe 
para mais de 20 mil linhas na hora do merge







Em 16 de maio de 2015 13:32, Diego Miro <[email protected]> escreveu:

Victor, tente usar o argumento (all.x = TRUE) dentro do merge. Dessa forma você 
estará fazendo um Left Join.



Ele vai retornar a tabela dados inteira, com todos os seus registros e apenas 
os registros de dados1 que tenham um id pertencente a coluna id de dados. Caso 
não encontre o id em dados, retorna NA em dados1.



merge(x = dados, y = dados1, by = 'Id', all.x = TRUE)



Em 16 de maio de 2015 12:00, Fernando Antonio de souza <[email protected]> 
escreveu:

Veja a função merge()

Em 16/05/2015 11:35, "Victor Eduardo" <[email protected]> escreveu:

Bom dia, pessoal!



Estou com um problema na hora de juntar a base de dados. Estou com duas bases 
com as seguintes dimensões:

> dim(dados)

[1] 2056   11





> dim(dados1)

[1] 1782    2







Ambas as bases possuem uma variável chamada "id". O que queria é formar um 
subconjunto a partir de dados1 baseado nesses ids, ou seja, aproveitaria as 
variáveis da base "dados" com as variáveis em "dados1".


Eu tentei com o merge e não está dando certo. Existe alguma função que faça 
isso?







Abraços e ótima semana!



_______________________________________________
R-br mailing list
[email protected]
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
[email protected]
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
[email protected]
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.





--



Paulo Dick

Estatístico

Mestrando em Epidemiologia em Saúde Pública

Tel.: (55 21) 99591-2716


_______________________________________________
R-br mailing list
[email protected]
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
[email protected]
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.





---
Este email foi escaneado pelo Avast antivírus.
http://www.avast.com
_______________________________________________
R-br mailing list
[email protected]
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.

Responder a