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

在R语言中比较不同数据框列并合并符合条件的ID

用循环实现数据框行匹配并合并Id的解决方案

嘿,我来帮你搞定这个需求!咱们先把问题理清楚:你有两个结构一致的数据框a和b,需要逐行检查a的start值大于b的start,且a的stop值小于b的stop,满足条件的话就把两行对应的Id合并到新数据框里。

第一步:先定义两个数据框

首先咱们用Python的pandas库把你给出的数据框创建出来(这是处理表格数据的常用工具):

import pandas as pd

# 创建数据框a
a = pd.DataFrame({
    'Id': ['ABC', 'ACD', 'BCD'],
    'start': [25, 40, 55],
    'stop': [30, 60, 60]
})

# 创建数据框b
b = pd.DataFrame({
    'Id': ['XYZ', 'ZXY', 'YZX'],
    'start': [20, 80, 50],
    'stop': [50, 90, 70]
})

第二步:用循环实现匹配逻辑

接下来咱们用循环逐行检查条件,收集符合要求的Id对:

# 初始化空列表,用来存储符合条件的Id组合
matched_pairs = []

# 遍历每一行的索引(假设两个数据框行数相同,行与行一一对应)
for row_idx in range(len(a)):
    # 取出当前行的start和stop值
    a_start = a.loc[row_idx, 'start']
    a_stop = a.loc[row_idx, 'stop']
    b_start = b.loc[row_idx, 'start']
    b_stop = b.loc[row_idx, 'stop']
    
    # 判断是否满足目标条件
    if a_start > b_start and a_stop < b_stop:
        # 把符合条件的Id存成字典,方便后续转成数据框
        matched_pairs.append({
            'a_Id': a.loc[row_idx, 'Id'],
            'b_Id': b.loc[row_idx, 'Id']
        })

# 将列表转成最终的结果数据框
result_df = pd.DataFrame(matched_pairs)
print(result_df)

运行结果

执行这段代码后,输出的结果数据框会是:

a_Id b_Id
0  ABC  XYZ
2  BCD  YZX

除了你例子里提到的ABC和XYZ,BCD和YZX也满足条件(a的start=55 > b的start=50,且a的stop=60 < b的stop=70),所以也被收录进来了。

内容的提问来源于stack exchange,提问作者tnocs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:48:00