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
相关产品推荐
相关产品推荐

