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.