如何删除R中具有反转值的行?

时间:2019-03-25 17:26:02

标签: r delete-row inverse

我有一个从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和117_101看到的隔离对101和117所见。因此,我只想保留这些重复对中的一对。

基本命令duplicatedunique不能解决我的问题,因为重复的对具有相反的名称。我还尝试遵循另一个问题(Deleting reversed duplicates with R)中给出的建议,但由于我对R的了解不足,因此无法使它们与我的数据配合使用。

有什么建议吗?预先谢谢你!

2 个答案:

答案 0 :(得分:0)

您可以对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), ]

答案 1 :(得分:0)

我相信这会起作用(也可以在data.frames btw上起作用)

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