Dados dos marcos de datos ay 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
¿Hay una manera simple de concatenarlos para devolver un nuevo marco de datos del siguiente formulario?
> 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
Quiero fusionar los marcos de datos, hacer coincidir los encabezados e insertar NA posiciones en el marco de datos bdonde falta el encabezado.
r
dataframe
concatenation
Darren J. Fitzpatrick
fuente
fuente

merge(). ¿Por qué eso no funciona?Respuestas:
Quieres "rbind".
rbind requiere que los marcos de datos tengan las mismas columnas.
La primera línea agrega la columna b al marco de datos b.
Resultados
fuente
Reduce(rbind, list_of_data_frames)para unirlos todos!rbindvienes de la base por alguna extraña razón: solíarbind.data.framePrueba el paquete plyr :
fuente
plyrcuando ofrece las herramientas adecuadas para el trabajo simplemente no es sensato.plyrEs un paquete común horrible.puedes usar la función
bind_rows(a,b)de la biblioteca dplyr
fuente
cbind(rbind), esta función no cambia el tipo de todas las columnas (filas)factorsi hay un vector de caracteres.Aquí hay una pequeña función simple que unirá dos conjuntos de datos después de detectar automáticamente qué columnas faltan en cada uno y agregarlos con todos los
NAs.Por alguna razón, esto devuelve MUCHO más rápido en conjuntos de datos más grandes que el uso de la
mergefunción.fuente
NAtodoubleen su respuesta. Sería bueno cuando el tipo de la nueva columna fuera del mismo tipo que la columna existente en el otro marco de datos. Tal vez a través demode(d2[d2.add[i]]) <- mode(d1[d2.add[i]]). Pero no estoy seguro de si esta es la forma adecuada.Puede usar,
rbindpero en este caso necesita tener el mismo número de columnas en ambas tablas, así que intente lo siguiente:fuente