R语言实现两个数据框相等行匹配并标记对应行号
R实现按行匹配并标注df2对应行号
注意示例中df2第三列列名为小写v3,和df1的大写V3存在命名差异,匹配时需要对应上列名,否则会匹配失败。
实现代码(base R 无需额外安装包)
# 示例数据集 df1 <- data.frame(V1 = 1:10, V2 = 1:10, V3 = 1:10) df2 <- data.frame(V1 = 5:1, V2 = 5:1, v3 = c(1, 4, 5, 2, 3)) # 给df2新增列存储自身行号 df2$rows_matched <- seq_len(nrow(df2)) # 按对应列做左连接匹配,无需修改df2原有列名 df1 <- merge( x = df1, y = df2, by.x = c("V1", "V2", "V3"), by.y = c("V1", "V2", "v3"), all.x = TRUE ) # 未匹配到的行标记为FALSE df1$rows_matched[is.na(df1$rows_matched)] <- FALSE
运行结果
执行代码后输出的df1完全符合预期:
V1 V2 V3 rows_matched 1 1 1 1 FALSE 2 2 2 2 4 3 3 3 3 FALSE 4 4 4 4 2 5 5 5 5 FALSE 6 6 6 6 FALSE 7 7 7 7 FALSE 8 8 8 8 FALSE 9 9 9 9 FALSE 10 10 10 10 FALSE
逻辑说明
- 提前给
df2加行号列,匹配成功时可以直接取到对应行的位置 - 用base R自带的
merge函数做左连接,分别指定df1、df2用于匹配的对应列,不需要修改原始数据的列名 - 左连接后未匹配成功的行
rows_matched列会返回NA,直接替换为要求的FALSE即可
内容的提问来源于stack exchange,提问作者Wilson Souza
相关产品推荐
相关产品推荐

