Слияние кадров данных с использованием таблицы соответствия с использованием R

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

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

Есть идеи?


person goclem    schedule 02.09.2015    source источник
comment
Мы получаем ожидаемый результат на основе Reduce(merge, list(mykeys, mydf1, mydf2)), предложенного @CathG. Можете ли вы привести пример, где это не работает.   -  person akrun    schedule 02.09.2015
comment
Виноват! Работает просто отлично :)   -  person goclem    schedule 02.09.2015
comment
Спасибо, я восстановил пост.   -  person akrun    schedule 02.09.2015


Ответы (1)


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

Reduce(merge, list(mykeys, mydf1, mydf2))
person akrun    schedule 02.09.2015
comment
Спасибо за Ваш ответ. Извините, я заметил ошибку в предоставленных данных (id2). Таким образом, код, который вы предоставили, больше не работает. Виноват :) - person goclem; 02.09.2015
comment
@Clement Можете ли вы изменить данные в своем сообщении? - person akrun; 02.09.2015
comment
то это должен сделать только Reduce(merge, list(mykeys, mydf1, mydf2)), нет? А точнее Reduce(merge, list(mykeys, mydf1, mydf2), right=TRUE) чтобы был правильный порядок - person Cath; 02.09.2015