需要比较两个不同长度的数据帧,并根据r中的匹配条件更新其中一个数据帧的列

时间:2016-04-20 08:56:09

标签: r dataframe

我有两个数据帧df1和df2。 df1> df2的大小。

df1 -> A      B        C       D     E  F
       1   4-23-2015   abc    dcv    0  0
       2   5-23-2015   abc    dcvm    1  0
       3   4-24-2015   ab    dcv      0  0
       4   4-23-2014   abc    dcv     0  0

df2 -> A      B         C      D     E F
       1   4-23-2015   abc    dcv    0  0
       3   4-24-2015   abc    dcv    0  0
       9   4-23-2015   abc    dcv    0  0

现在我要比较

df1$A with df2$A and df1$B with df2$B and when it is true then put df1$F =1. So my output for the above example will be

  df1 -> A      B        C       D     E  F
       1   4-23-2015   abc    dcv    0    1
       2   5-23-2015   abc    dcvm    1   0
       3   4-24-2015   ab    dcv      0   1
       4   4-23-2014   abc    dcv     0   0

列B是日期类型列,并且比较是行与行完成的。

2 个答案:

答案 0 :(得分:3)

这几乎是常见的merge欺骗,但是为了更清晰的输出和更快的性能,我建议data.table二进制左连接,并通过引用进行同步更新。像

这样的东西
library(data.table)
setDT(df1)[df2, F := 1L, on = c("A", "B")]
df1
#    A         B   C    D E F
# 1: 1 4-23-2015 abc  dcv 0 1
# 2: 2 5-23-2015 abc dcvm 1 0
# 3: 3 4-24-2015  ab  dcv 0 1
# 4: 4 4-23-2014 abc  dcv 0 0

否则,一个简单的merge(df1, df2, by = c("A", "B"), all.x = TRUE)会显示匹配的行,但您需要删除不必要的列并相应地更新F

答案 1 :(得分:1)

根据您的示例,

ON COMMIT DROP