2016-10-09 2 views
-1

У меня есть два кадра данных в R: большой и маленький. Большой dataframe имеет следующую структуру:Обновление одного столбца на основе сопоставления других двух столбцов с другим фреймом даты

ID Date value1 value2 
1 Aug 1  2 
1 Sep 1  3 
2 Aug 3  2 
2 Sep 4  3 

маленький, как это:

ID Date value1 
1 Aug 2   
2 Aug 5  

большой dataframe имеет все имена столбцов в маленькой и более. Маленький имеет несколько новых значений около value1. Поэтому моя задача - обновить значение1 большого фрейма данных на основе соответствия ID и Дата с маленьким. Итак, результирующий информационный кадр должен быть таким,

ID Date value1 value2 
1 Aug 2  2 
1 Sep 1  3 
2 Aug 5  2 
2 Sep 4  3 

Любой ключ к тому, как это сделать?

+0

Не забывайте обмениваться данными через 'dput()' при использовании тега R (наведите указатель мыши на тег, чтобы прочитать описание тега R). –

ответ

0

Использование data.table, мы можем присоединиться к on в ID и Date столбцы в обоих наборах данных и присвоить (:=) элементы в i.value1 к value1 в первом наборе данных (df1).

library(data.table) 
setDT(df1)[df2, value1 := i.value1, on = .(ID, Date)] 
df1 
# ID Date value1 value2 
#1: 1 Aug  2  2 
#2: 1 Sep  1  3 
#3: 2 Aug  5  2 
#4: 2 Sep  4  3 

Размещая i. перед value1 вы указываете, что data.table должен принимать значения от value1 из dataframe df2.

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