Diberikan dua kerangka data a
dan 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
Apakah ada cara sederhana untuk menggabungkan ini sehingga mengembalikan kerangka data baru dari formulir di bawah ini?
> 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
Saya ingin menggabungkan kerangka data, mencocokkan header, dan menyisipkan NA
posisi di bingkai data di b
mana header tidak ada.
r
dataframe
concatenation
Darren J. Fitzpatrick
sumber
sumber
merge()
? Mengapa itu tidak berhasil?Jawaban:
Anda ingin "rbind".
rbind membutuhkan frame data untuk memiliki kolom yang sama.
Baris pertama menambahkan kolom b ke bingkai data b.
Hasil
sumber
Reduce(rbind, list_of_data_frames)
untuk menyatukan semuanya!rbind
datang dari markas untuk beberapa alasan aneh: Saya menggunakanrbind.data.frame
Coba paket plyr :
sumber
plyr
ketika menawarkan alat yang tepat untuk pekerjaan itu sama sekali tidak masuk akal.plyr
adalah paket umum yang mengerikan.Anda dapat menggunakan fungsinya
bind_rows(a,b)
dari perpustakaan dplyr
sumber
cbind
(rbind
), fungsi ini tidak mengubah jenis semua kolom (baris) menjadifactor
jika ada vektor karakter.Berikut adalah fungsi kecil sederhana yang akan mengikat dua set data bersama-sama setelah secara otomatis mendeteksi kolom apa yang hilang dari masing-masing dan menambahkannya dengan semua
NA
s.Untuk alasan apa pun ini mengembalikan JAUH lebih cepat pada kumpulan data yang lebih besar daripada menggunakan
merge
fungsi.sumber
NA
kedouble
dalam jawabannya. Akan lebih baik bila jenis kolom baru adalah jenis yang sama dengan kolom yang ada di bingkai data lainnya. Mungkin viamode(d2[d2.add[i]]) <- mode(d1[d2.add[i]])
. Tetapi saya tidak yakin apakah ini cara yang tepat.Anda dapat menggunakan
rbind
tetapi dalam hal ini Anda harus memiliki jumlah kolom yang sama di kedua tabel, jadi coba yang berikut ini:sumber