我有两个数据帧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是日期类型列,并且比较是行与行完成的。
答案 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