2015-09-02 5 views
2

Я хотел бы написать функцию, которая объединяет два фрейма данных (mydf1 и mydf2) в соответствии с таблицей соответствия (mykeys). Рассмотрим следующий пример:Слияние данных с использованием таблицы соответствия с использованием R

mydf1=data.frame(id1=1:5,myvar1=letters[1:5]) 
mydf2=data.frame(id2=LETTERS[1:5],myvar2=letters[6:10]) 

mykeys=data.frame(id1=1:3,id2=LETTERS[1:3]) 

Результат должен быть

# id1 id2 myvar1 myvar2 
# 1 A a  f 
# 2 B b  g 
# 3 C c  h 

Любая идея?

+1

Мы получаем ожидаемый результат на основе 'Уменьшить (слияние, список (mykeys, mydf1, mydf2))', как было предложено @CathG. Можете ли вы привести пример, где он не работает. – akrun

+0

Мой плохой! Он отлично работает :) – goclem

+0

Спасибо, я восстановил сообщение. – akrun

ответ

1

Мы можем использовать merge после размещения наборов данных в list. Изменено на основе комментариев от @CathG и редактирования в наборе данных OP.

Reduce(merge, list(mykeys, mydf1, mydf2)) 
+0

Спасибо за ваш ответ. Извините, я заметил ошибку в данных, которые я предоставил ('id2'). Таким образом, код, который вы предоставили, больше не работает. Мой плохой :) – goclem

+0

@Clement Можете ли вы изменить данные в своем сообщении – akrun

+1

, а затем просто «Уменьшить (слить, перечислить (mykeys, mydf1, mydf2))' должен сделать это, нет? Или, скорее, «Уменьшить (слить, перечислить (mykeys, mydf1, mydf2), right = TRUE)», чтобы иметь правильный порядок – Cath

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