You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 13:27:22