【问题标题】:How to delete rows with inverted values in R?如何删除R中具有反转值的行?
【发布时间】:2019-03-25 17:26:02
【问题描述】:

我有一张表从 SNP 差异的成对距离矩阵中融合而成。在第一列中,我有成对的分离株,这是由矩阵列中的分离株数与矩阵行中的分离株数组合而成的,如下所示:

Patients  Method1 Method2
101_117   0       0
101_98    0       0
117_101   0       0
117_98    0       0
120_128   0       0

我想对这些数据进行后验分析,为此我想消除具有重复分离对的行。然而,这些重复的分离株对是倒置的,正如我们可以看到的分离株 101 和 117,它们在表中以对 101_117 和 117_101 的形式出现。因此,我想只保留这些重复的一对。

基本命令 duplicatedunique 并没有解决我的问题,因为重复的对具有倒置的名称。我也尝试遵循另一个问题 (Deleting reversed duplicates with R) 中给出的建议,但无法让它们处理我的数据,因为我对 R 没有那么丰富的经验。

有什么建议吗?提前谢谢!

【问题讨论】:

  • 在熔化(将宽转换为长)之前,可能在距离矩阵上使用 upper.trilower.tri,这是最快的方法。

标签: r delete-row inverse


【解决方案1】:

我相信这会起作用(顺便说一句,也适用于 data.frames)

library(data.table)
library(stringr)
 DT <- fread("Patients  Method1 Method2
101_117   0       0
            101_98    0       0
            117_101   0       0
            117_98    0       0
            120_128   0       0")

DT[ !duplicated( lapply( stringr::str_extract_all( DT$Patients, "[0-9]+" ), sort ) ), ]

#    Patients Method1 Method2
# 1:  101_117       0       0
# 2:   101_98       0       0
# 3:   117_98       0       0
# 4:  120_128       0       0

【讨论】:

    【解决方案2】:

    您可以对Patients 进行排序,然后duplicated 应该可以工作

    df$Patients <- sapply(df$Patients,function(x){
      paste(sort(as.numeric(unlist(strsplit(x, "_")))), collapse = "_")
    }, USE.NAMES = F)
    
    df <- df[!duplicated(df$Patients), ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-12
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      相关资源
      最近更新 更多