更新一个基于列的其他两列与另一个日期帧的匹配

时间:2016-10-09 06:20:45

标签: r dataframe match

我在R中有两个数据帧:一个大数据帧和一个小数据帧。大数据框具有以下结构:

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     

大数据框具有小的一个或多个列名。小的有一些关于 value1 的新值。所以我的任务是根据 ID Date 与小数据的匹配来更新大数据帧的value1。因此,结果数据框应该是这个,

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

有关如何完成此任务的任何线索?

2 个答案:

答案 0 :(得分:0)

使用data.table,我们可以加入on两个数据集中的IDDate列,并为:=中的元素分配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数据框df2中获取值。

答案 1 :(得分:0)

可以通过df2[match(df1$ID, df2$ID) & match(df1$Date, df2$Date),'value1'] 共享数据吗?


也许,这样的事情应该起作用?

{{1}}