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所见。因此,我只想保留这些重复对中的一对。
基本命令duplicated
和unique
不能解决我的问题,因为重复的对具有相反的名称。我还尝试遵循另一个问题(Deleting reversed duplicates with R)中给出的建议,但由于我对R的了解不足,因此无法使它们与我的数据配合使用。
有什么建议吗?预先谢谢你!
答案 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