我有两个数据格式: 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是日期类型列,比较也是行对行。
发布于 2016-04-20 09:51:22
这几乎是通常的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。
发布于 2016-04-20 09:22:41
根据你的例子,
df1$F[apply(df1[,c('A', 'B')], 1, paste, collapse = '') %in% apply(df2[,c('A', 'B')], 1, paste, collapse = '')] <- 1
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 0https://stackoverflow.com/questions/36738628
复制相似问题