Учитывая два фрейма данных a
и 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
Есть ли простой способ объединить их, чтобы вернуть новый фрейм данных в форме ниже?
> 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
Я хочу объединить фреймы данных, сопоставить заголовки и вставить NA
позиции в фрейм данных, b
где отсутствует заголовок.
r
dataframe
concatenation
Даррен Дж. Фицпатрик
источник
источник
merge()
? Почему это не работает?Ответы:
Вы хотите «рибинд».
rbind требует, чтобы фреймы данных имели одинаковые столбцы.
Первая строка добавляет столбец b к фрейму данных b.
Полученные результаты
источник
Reduce(rbind, list_of_data_frames)
их для объединения всех вместе!rbind
с базы по какой-то странной причине: Я использовалrbind.data.frame
Попробуйте пакет plyr :
источник
plyr
когда они предлагают правильные инструменты для работы, просто неразумно.plyr
ужасно распространенный пакет.вы можете использовать функцию
bind_rows(a,b)
из библиотеки dplyr
источник
cbind
(rbind
), эта функция не изменяет тип всех столбцов (строк),factor
если присутствует вектор символов.Вот небольшая простая функция, которая связывает два набора данных вместе после автоматического определения, какие столбцы отсутствуют в каждом, и добавления их со всеми
NA
s.По какой-то причине это возвращает НАМНОГО быстрее на больших наборах данных, чем при использовании
merge
функции.источник
NA
кdouble
в своем ответе. Было бы неплохо, если бы тип нового столбца был того же типа, что и тип существующего столбца в другом фрейме данных. Может черезmode(d2[d2.add[i]]) <- mode(d1[d2.add[i]])
. Но я не уверен, что это правильный способ.Вы можете использовать,
rbind
но в этом случае вам нужно иметь одинаковое количество столбцов в обеих таблицах, поэтому попробуйте следующее:источник