Dados dois quadros de dados a
e b
:
> a
a b c
1 -0.2246894 -1.48167912 -1.65099363
2 0.5559320 -0.87898575 -0.15634590
3 1.8469466 -0.01487524 -0.53098215
4 -0.6875051 0.23880967 0.01824621
5 -0.6735163 0.75485292 0.44154092
> b
a c
1 0.4287284 -0.3295925
2 0.5201492 0.3341251
3 -2.6355570 1.7916780
4 -1.3645337 1.3642276
5 -0.4954542 -0.6660001
Existe uma maneira simples de concatená-las para retornar um novo quadro de dados do formulário abaixo?
> new
a b c
1 -0.2246894 -1.48167912106676 -1.65099363
2 0.5559320 -0.878985746842256 -0.15634590
3 1.8469466 -0.0148752354840942 -0.53098215
4 -0.6875051 0.238809666690982 0.01824621
5 -0.6735163 0.754852923524198 0.44154092
6 0.4287284 NA -0.32959248
7 0.5201492 NA 0.33412510
8 -2.6355570 NA 1.79167801
9 -1.3645337 NA 1.36422764
10 -0.4954542 NA -0.66600006
Quero mesclar os quadros de dados, combinar os cabeçalhos e inserir NA
posições no quadro de dados em b
que o cabeçalho está ausente.
r
dataframe
concatenation
Darren J. Fitzpatrick
fonte
fonte
merge()
? Por que isso não funciona?Respostas:
Você quer "rbind".
O rbind requer que os quadros de dados tenham as mesmas colunas.
A primeira linha adiciona a coluna b ao quadro de dados b.
Resultados
fonte
Reduce(rbind, list_of_data_frames)
-los para misturá-los todos juntos!rbind
vindo da base por algum motivo estranho: eu useirbind.data.frame
Experimente o pacote plyr :
fonte
plyr
quando oferece as ferramentas certas para o trabalho, simplesmente não é sensato.plyr
é um pacote comum terrível.você pode usar a função
bind_rows(a,b)
da biblioteca dplyr
fonte
cbind
(rbind
), essa função não altera o tipo de todas as colunas (linhas) parafactor
se houver um vetor de caracteres.Aqui está uma pequena função simples que reunirá dois conjuntos de dados após detectar automaticamente quais colunas estão faltando em cada uma e adicioná-las com todos os
NA
s.Por qualquer motivo, isso retorna MUITO mais rápido em conjuntos de dados maiores que o uso da
merge
função.fonte
NA
paradouble
em sua resposta. Seria bom quando o tipo da nova coluna fosse do mesmo tipo que a coluna existente no outro quadro de dados. Talvez viamode(d2[d2.add[i]]) <- mode(d1[d2.add[i]])
. Mas não tenho certeza se esse é o caminho apropriado.Você pode usar,
rbind
mas, nesse caso, você precisa ter o mesmo número de colunas nas duas tabelas, portanto, tente o seguinte:fonte