R语言如何提取dataframe中存在于另一dataframe的行索引
R语言提取两数据框共有行的原始索引
你需要提取数据框A中x、y取值与B完全一致的行的原始索引,可直接参考以下实现方式:
基础R实现(无需安装加载第三方包)
最简一行代码实现
将每行的x、y值组合为唯一标识,判断A中哪些行的标识存在于B中,直接返回对应行索引即可:
c <- which(interaction(A[, c("x", "y")]) %in% interaction(B[, c("x", "y")]))
运行后输出的c就是预期的4 6,和你要的c(4,6)结果完全一致。
逻辑更直观的写法
如果觉得组合标识的写法可读性差,可以用内连接的思路实现,步骤更清晰:
# 给A表新增一列存储每行的原始行号 A$row_idx <- seq_len(nrow(A)) # 按x、y两列做内连接,仅保留两表共有的行 common_part <- merge(A, B, by = c("x", "y")) # 提取共有行对应的A原始索引 c <- common_part$row_idx
tidyverse生态实现(dplyr语法)
如果平时习惯用dplyr做数据处理,可以用半连接函数semi_join()直接筛选匹配行,代码更简洁:
library(dplyr) c <- A %>% mutate(row_idx = row_number()) %>% semi_join(B, by = c("x", "y")) %>% pull(row_idx)
注意:如果x、y列是浮点运算得到的数值,可能存在微小精度误差导致匹配失败,这种情况建议先对两表的x、y列做固定小数位的四舍五入处理(比如保留6位小数),再执行匹配操作,避免漏判。
内容的提问来源于stack exchange,提问作者locket
相关产品推荐
相关产品推荐

