Empilhar data-frames com colunas diferentes

Boa tarde grupo! Estou com um problema que acredito ser bastante simples de resolver, porém, pesquisei e ainda não encontrei alternativa prática. A grosso modo, quero empilhar bases para formar uma única. O problema é que elas não possuem o mesmo layout. Todas possuem algumas colunas em comum e outras não. Quando uma base não possuir determinada coluna gostaria de deixar NA nos registros oriundos dessa base. Para quem conhece SAS, procuro o resultado de fazer simplesmente: DATA base_final; SET Base1 Base2; RUN; No R ainda não consigo utilizar a função rbind com o mesmo resultado. Segue exemplo para reprodução. # Exemplo d1<-data.frame(index=1,a=1,b=91)d2<-data.frame(index=1,b=92,a=2,c=200)rbind.data.frame(d1,d2)Erro em rbind.data.frame(d1, d2) : números de colunas dos argumentos não correspondem O resultado que desejo é index a b c 1 1 91 NA 1 2 92 200 O rbind troca a posição das colunas baseada nos nomes. Isso ajuda. Mas não sei como fazer funcionar quando algumas colunas estão apenas em algumas bases, o que no exemplo acontece com a coluna c da base d2. Como vocês fariam? Abraços, Paulo Nogueira Starzynski

pode usar a funcao abaixo: plyr::rbind.fill(d1,d2) até mais. 2012/8/20 Paulo Nogueira <paulons@gmail.com>
Boa tarde grupo!
Estou com um problema que acredito ser bastante simples de resolver, porém, pesquisei e ainda não encontrei alternativa prática. A grosso modo, quero empilhar bases para formar uma única. O problema é que elas não possuem o mesmo layout. Todas possuem algumas colunas em comum e outras não. Quando uma base não possuir determinada coluna gostaria de deixar NA nos registros oriundos dessa base.
Para quem conhece SAS, procuro o resultado de fazer simplesmente: DATA base_final; SET Base1 Base2; RUN;
No R ainda não consigo utilizar a função rbind com o mesmo resultado.
Segue exemplo para reprodução. # Exemplo
d1<-data.frame(index=1,a=1,b=91)d2<-data.frame(index=1,b=92,a=2,c=200)rbind.data.frame(d1,d2)Erro em rbind.data.frame(d1, d2) : números de colunas dos argumentos não correspondem
O resultado que desejo é index a b c 1 1 91 NA 1 2 92 200
O rbind troca a posição das colunas baseada nos nomes. Isso ajuda. Mas não sei como fazer funcionar quando algumas colunas estão apenas em algumas bases, o que no exemplo acontece com a coluna c da base d2. Como vocês fariam?
Abraços, Paulo Nogueira Starzynski
_______________________________________________ R-br mailing list R-br@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.
-- #------------------------------------------------------------------------------# # Jônatan Dupont Tatsch # # Climate and Biosphere Laboratory # # Department of Atmospheric Sciences # # Institute of Astronomy, Geophysics and Atmospheric Sciences # # University of São Paulo # # Rua do Matão, 1226 # # Cid. Universitária, São Paulo, SP, Brazil, CEP: 05508-090 # # Phone:+55 11 3091-4772, Fax:+55 11 3091-4714 # # http://jonatandupont.weebly.com/index.html # #------------------------------------------------------------------------------#

putz... perfeito! Perdi um tempo nisso e dava pra fazer assim. hehe Obrigado Jônatan. Paulo Em 20 de agosto de 2012 17:03, Jônatan <jdtatsch@gmail.com> escreveu:
pode usar a funcao abaixo: plyr::rbind.fill(d1,d2)
até mais.
2012/8/20 Paulo Nogueira <paulons@gmail.com>
Boa tarde grupo!
Estou com um problema que acredito ser bastante simples de resolver, porém, pesquisei e ainda não encontrei alternativa prática. A grosso modo, quero empilhar bases para formar uma única. O problema é que elas não possuem o mesmo layout. Todas possuem algumas colunas em comum e outras não. Quando uma base não possuir determinada coluna gostaria de deixar NA nos registros oriundos dessa base.
Para quem conhece SAS, procuro o resultado de fazer simplesmente: DATA base_final; SET Base1 Base2; RUN;
No R ainda não consigo utilizar a função rbind com o mesmo resultado.
Segue exemplo para reprodução. # Exemplo
d1<-data.frame(index=1,a=1,b=91)d2<-data.frame(index=1,b=92,a=2,c=200)rbind.data.frame(d1,d2)Erro em rbind.data.frame(d1, d2) : números de colunas dos argumentos não correspondem
O resultado que desejo é index a b c 1 1 91 NA 1 2 92 200
O rbind troca a posição das colunas baseada nos nomes. Isso ajuda. Mas não sei como fazer funcionar quando algumas colunas estão apenas em algumas bases, o que no exemplo acontece com a coluna c da base d2. Como vocês fariam?
Abraços, Paulo Nogueira Starzynski
_______________________________________________ R-br mailing list R-br@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.
--
#------------------------------------------------------------------------------# # Jônatan Dupont Tatsch # # Climate and Biosphere Laboratory # # Department of Atmospheric Sciences # # Institute of Astronomy, Geophysics and Atmospheric Sciences # # University of São Paulo # # Rua do Matão, 1226 # # Cid. Universitária, São Paulo, SP, Brazil, CEP: 05508-090 # # Phone:+55 11 3091-4772, Fax:+55 11 3091-4714 # # http://jonatandupont.weebly.com/index.html #
#------------------------------------------------------------------------------#
_______________________________________________ R-br mailing list R-br@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.

o problema nao esta' completamente definido... por exemplo, o q e' pra acontecer se vc tiver um registro em d1 que tenha os mesmos valores para 'a', 'b' e 'c' em d2? minha solucao comecaria com merge(d1, d2, all=TRUE) b 2012/8/20 Paulo Nogueira <paulons@gmail.com>:
Boa tarde grupo!
Estou com um problema que acredito ser bastante simples de resolver, porém, pesquisei e ainda não encontrei alternativa prática. A grosso modo, quero empilhar bases para formar uma única. O problema é que elas não possuem o mesmo layout. Todas possuem algumas colunas em comum e outras não. Quando uma base não possuir determinada coluna gostaria de deixar NA nos registros oriundos dessa base.
Para quem conhece SAS, procuro o resultado de fazer simplesmente: DATA base_final; SET Base1 Base2; RUN;
No R ainda não consigo utilizar a função rbind com o mesmo resultado.
Segue exemplo para reprodução. # Exemplo
d1<-data.frame(index=1,a=1,b=91) d2<-data.frame(index=1,b=92,a=2,c=200) rbind.data.frame(d1,d2) Erro em rbind.data.frame(d1, d2) : números de colunas dos argumentos não correspondem
O resultado que desejo é index a b c 1 1 91 NA 1 2 92 200
O rbind troca a posição das colunas baseada nos nomes. Isso ajuda. Mas não sei como fazer funcionar quando algumas colunas estão apenas em algumas bases, o que no exemplo acontece com a coluna c da base d2. Como vocês fariam?
Abraços, Paulo Nogueira Starzynski
_______________________________________________ R-br mailing list R-br@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.

Oi Benilton. Eu não preciso de um merge, preciso apenas empilhar as bases. No exemplo que levantou, os registros ficariam empilhados na base final com os mesmos valores. Obrigado, Paulo Em 20 de agosto de 2012 17:37, Benilton Carvalho <beniltoncarvalho@gmail.com
escreveu:
o problema nao esta' completamente definido... por exemplo, o q e' pra acontecer se vc tiver um registro em d1 que tenha os mesmos valores para 'a', 'b' e 'c' em d2?
minha solucao comecaria com
merge(d1, d2, all=TRUE)
b
2012/8/20 Paulo Nogueira <paulons@gmail.com>:
Boa tarde grupo!
Estou com um problema que acredito ser bastante simples de resolver, porém, pesquisei e ainda não encontrei alternativa prática. A grosso modo, quero empilhar bases para formar uma única. O problema é que elas não possuem o mesmo layout. Todas possuem algumas colunas em comum e outras não. Quando uma base não possuir determinada coluna gostaria de deixar NA nos registros oriundos dessa base.
Para quem conhece SAS, procuro o resultado de fazer simplesmente: DATA base_final; SET Base1 Base2; RUN;
No R ainda não consigo utilizar a função rbind com o mesmo resultado.
Segue exemplo para reprodução. # Exemplo
d1<-data.frame(index=1,a=1,b=91) d2<-data.frame(index=1,b=92,a=2,c=200) rbind.data.frame(d1,d2) Erro em rbind.data.frame(d1, d2) : números de colunas dos argumentos não correspondem
O resultado que desejo é index a b c 1 1 91 NA 1 2 92 200
O rbind troca a posição das colunas baseada nos nomes. Isso ajuda. Mas não sei como fazer funcionar quando algumas colunas estão apenas em algumas bases, o que no exemplo acontece com a coluna c da base d2. Como vocês fariam?
Abraços, Paulo Nogueira Starzynski
_______________________________________________ R-br mailing list R-br@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@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.
participantes (3)
-
Benilton Carvalho
-
Jônatan
-
Paulo Nogueira