【问题标题】:Removing rows from a table based off values in another conditional on a value in a separate column using base R使用base R从另一个表中删除行,条件是另一个列中的值
【发布时间】:2020-12-20 11:07:47
【问题描述】:

我有一张桌子:

ID Phenotype 
AA 1
AB 1
AC 0
AD 1
AE 0
AF 1
AG 0

我有一个具有“1”表型的 ID 列表,我想从其他“1”表型中进行子集化。我想保留所有“0”表型。

说出清单:AB,AD

期望的结果是:

        ID Phenotype 
        AA 1
        AB 1
        AC 0
        AD 1
        AE 0
        AG 0

I.E. AF 将被删除,因为它是表型“1”但不在列表中,并且所有表型“0”都保持不变。

在现实表和列表中有数千个条目。所有的 ID 都是唯一的。

我在一个与外部工具气锁的 HPC 工作,因此首选基本 R 解决方案。我可以将表子集为表型 1 和 0,删除我不想要的表型,然后重新加入表,但我想知道是否有一种单一的方法可以做到这一点?

非常感谢

【问题讨论】:

    标签: r datatable subset


    【解决方案1】:

    基地R 单线将是:

    代码:

    df[df[, 1] %in% v | df[, 2] == 0, ]
    
    # checks which data.frame entries are matched in the supplied vector
    
    df[, 1] %in% v 
    
    # checks which second column entries equal 0
    
    df[, 2] == 0
    
    # then we just utilize | to tell R to accept entries that satisfy either of our 
    # conditions 
    

    数据:

    df <- read.table(text = "ID Phenotype 
    AA 1
    AB 1
    AC 0
    AD 1
    AE 0
    AF 1
    AG 0", header = T)
    
    v <- c("AB", "AD")
    

    【讨论】:

    • 感谢您花时间回答。工作得很好。只是为了我的学习,代码说:在第 1 列中搜索 df 那些存在于 v 中的值。“|”符号表示像linux中的管道?将这些结果通过管道传输到第二列为 0 的那些行中?
    • @tacrolimus 我添加了一些 cmets 希望可以解决问题
    • 太棒了 - 再次感谢您抽出宝贵时间回答和解释。它确实有助于新手掌握事物!万事如意
    猜你喜欢
    • 2011-05-17
    • 2016-08-28
    • 1970-01-01
    • 2018-08-07
    • 2012-02-22
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多