如何删除R中具有反转值的行?
我有一张由SNP差异的成对距离矩阵分解而成的表格。在第一列中,我有一对分离物,这是由矩阵列中的分离物编号与矩阵行中的分离物编号组合而成的,如下所示:如何删除R中具有反转值的行?,r,delete-row,inverse,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 我想对这些数据进行后验分析,为此我想消除带有重复菌株对的行。然而,这些重复的分离物对是反向的,正
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的形式出现。因此,我只想保留其中的一对
基本命令duplicated
和unique
没有解决我的问题,因为重复对的名称是颠倒的。我也试着遵循另一个问题()中给出的建议,但无法让他们使用我的数据,因为我对R没有太多经验
有什么建议吗?提前谢谢你 您可以对
患者
进行排序,然后重复的
应该可以工作
df$Patients <- sapply(df$Patients,function(x){
paste(sort(as.numeric(unlist(strsplit(x, "_")))), collapse = "_")
}, USE.NAMES = F)
df <- df[!duplicated(df$Patients), ]
df$Patients我相信这会起作用(顺便说一句,在data.frames上也会起作用)
库(data.table)
图书馆(stringr)
DT可能在熔化前(将宽转换为长)在距离矩阵上使用upper.tri
或lower.tri
,这是最快的方法。
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