2015-01-07 3 views
-1

У меня есть проблема объединения двух фрейм данных с небольшой кадр данных является приоритетом, рассмотрим следующий пример, пожалуйста:Объединение двух кадров данных различной длины и разного уровня столбца в R

d1 
x y 

a 4 
b 5 
c 9 


d2 
y z 

5 2 
7 8 
9 3 
4 1 
6 8 

я хочу, чтобы получить тот же длина в качестве малой длиной кадра данных, если у столбца d1 = у колонки d2, как показано ниже:

merged 
y x z 

4 a 1 
5 b 2 
9 c 3 

я написал следующие коды, но не похожа на работу:

merged <- merge(d1, d2, by.x="y", by.y="y") 

Может ли кто-нибудь помочь?

спасибо.

+1

'merge (df1, df2)' должен сделать это. И я тоже получаю правильный результат с вашим кодом. Что не работает? Что такое сообщение об ошибке? –

+0

"Предупреждающее сообщение: В файле merge.data.frame (d1, d2, by.x =" y ", by.y =" y "): имя столбца 'y' дублируется в результате" и дает мне "5" строки вместо 3. – aliocee

+0

@aliocee Вы попробовали предложенный RichardScriven. Он должен получить то, что вы хотели. Если вы хотите указать 'by', это должно быть' merge (df1, df2, by = 'y') ', и ваши коды также дают результат без предупреждения. Вы должны представить пример, который дает предупреждение, но это не так. – akrun

ответ

1

вы можете получить 5 строк в выходном сигнале, если изменить порядок наборов данных, как:

merge(d2, d1, by="y") 

Вы можете добавить дополнительный столбец z в d1 через:

d1$z<-d2$z[match(d1$y,d2$y)] 

Предупреждение, которое вы получаете, указывает на наличие столбцов в двух наборах данных с одинаковыми именами, которые не совпадают с теми, которые вы используете. Чтобы увидеть совпадения в именах полей, используйте:

intersect(names(d1),names(d2)) 

(который происходит также значение по умолчанию для аргумента by).

Смежные вопросы