Dados dos marcos de datos a
y 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 b
donde 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!rbind
vienes de la base por alguna extraña razón: solíarbind.data.frame
Prueba el paquete plyr :
fuente
plyr
cuando ofrece las herramientas adecuadas para el trabajo simplemente no es sensato.plyr
Es 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)factor
si 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
NA
s.Por alguna razón, esto devuelve MUCHO más rápido en conjuntos de datos más grandes que el uso de la
merge
función.fuente
NA
todouble
en 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,
rbind
pero en este caso necesita tener el mismo número de columnas en ambas tablas, así que intente lo siguiente:fuente