在R中基于两个data.frame的匹配值创建0/1匹配标识列
解决方案
方法1:使用内置%in%运算符(推荐)
直接判断df的x列元素是否存在于df2的x列中,将返回的布尔值转为整数即可得到0/1匹配标识,代码简洁执行效率高:
# 构造示例数据 df <- data.frame(x = c('x1','x2','x3','x4','x5'), y = c(1,2,3,4,5)) df2 <- data.frame(x = c('x3','x5'), y = c(3,5)) # 新增匹配标识列 df$match <- as.integer(df$x %in% df2$x)
执行后df就是你需要的newdf结构,输出结果如下:
x y match 1 x1 1 0 2 x2 2 0 3 x3 3 1 4 x4 4 0 5 x5 5 1
方法2:基于merge实现(兼容原有合并逻辑)
如果你需要沿用merge的操作逻辑,也可以通过左连接+缺省值补0实现:
# 给df2新增匹配标记列 df2$match <- 1 # 左连接合并,保留df的所有行 newdf <- merge(df, df2[, c("x", "match")], by = "x", all.x = TRUE) # 未匹配到的行匹配值补0 newdf$match[is.na(newdf$match)] <- 0
内容的提问来源于stack exchange,提问作者MAJ
相关产品推荐
相关产品推荐

