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

R语言中subset与left_join筛选数据框结果不一致原因咨询

两种筛选方法结果行数不同的原因分析

这种情况完全合理,核心差异来自两种方法对「无匹配样本」的处理逻辑差异,以及关联操作和筛选操作的本质区别,具体拆解如下:

方法1的核心逻辑(left_join)

方法1最后一步用了left_join(MaleID, Big_data, by="Tumor_Sample_Barcode"),这是左连接操作,规则是:

  • 保留左表(MaleID,即所有唯一男性样本ID)的全部行
  • 如果右表(Big_data)中没有对应ID的记录,这些无匹配的行会保留,并用NA填充Big_data的所有列
  • 如果右表中同一个ID有多行记录,会和左表的ID逐一匹配,生成多行结果

最终Male_maf的行数 = Big_data中匹配到男性ID的行数 + MaleID中无匹配的ID数量

方法2的核心逻辑(%in%筛选)

方法2最后一步用subset(Big_data, Tumor_Sample_Barcode %in% Male_samples),这是子集筛选操作,规则是:

  • 只保留Big_data中Tumor_Sample_Barcode属于Male_samples的行
  • 完全丢弃Male_samples中在Big_data里没有对应记录的ID(这些ID不会在结果中产生任何行)
  • 同样保留Big_data中同一个ID的多行记录

最终M_maf的行数 = Big_data中匹配到男性ID的行数

行数差异的直接验证

两者的行数差(1983-1885=98),正好对应MaleID中在Big_data里没有对应记录的ID数量。你可以用以下代码验证:

# 计算MaleID中不在Big_data里的ID数量
sum(!MaleID$Tumor_Sample_Barcode %in% Big_data$Tumor_Sample_Barcode)

这个结果应该等于98,完全验证上述逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 17:22:06