Biorąc pod uwagę dwie ramki danych a
i 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
Czy istnieje prosty sposób na połączenie ich w celu zwrócenia nowej ramki danych z poniższego formularza?
> 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
Chcę scalić ramki danych, dopasować nagłówki i wstawić NA
pozycje w ramce danych, w b
których brakuje nagłówka.
r
dataframe
concatenation
Darren J. Fitzpatrick
źródło
źródło
merge()
? Dlaczego to nie działa?Odpowiedzi:
Chcesz "rbind".
rbind wymaga, aby ramki danych miały te same kolumny.
Pierwsza linia dodaje kolumnę b do ramki danych b.
Wyniki
źródło
Reduce(rbind, list_of_data_frames)
do zmiksowania ich wszystkich!rbind
przyjeżdżasz z bazy z jakiegoś dziwnego powodu: użyłemrbind.data.frame
Wypróbuj pakiet Plyr :
źródło
plyr
oferujących odpowiednie narzędzia do pracy, jest po prostu niecelowe.plyr
to okropny wspólny pakiet.możesz użyć funkcji
bind_rows(a,b)
z biblioteki dplyr
źródło
cbind
(rbind
), ta funkcja nie zmienia typu wszystkich kolumn (wierszy) nafactor
jeśli obecny jest wektor znaków.Oto prosta mała funkcja, która połączy ze sobą dwa zbiory danych po automatycznym wykryciu, których kolumn brakuje w każdym i dodaniu ich do wszystkich
NA
s.Z jakiegoś powodu zwraca to DUŻO szybciej w przypadku większych zbiorów danych niż użycie
merge
funkcji.źródło
NA
do”double
w swojej odpowiedzi. Byłoby miło, gdyby typ nowej kolumny był tego samego typu, co istniejąca kolumna w innej ramce danych. Może przezmode(d2[d2.add[i]]) <- mode(d1[d2.add[i]])
. Ale nie jestem pewien, czy jest to właściwy sposób.Możesz użyć,
rbind
ale w tym przypadku musisz mieć taką samą liczbę kolumn w obu tabelach, więc spróbuj wykonać następujące czynności:źródło