我在 R 中有一个数据框,其中包含拟南芥中旁系同源基因的基因ID,看起来像这样:

gene_x    gene_y
AT1       AT2
AT3       AT4
AT1       AT2
AT1       AT3
AT2       AT1

带有与基因名称相对应的“ATx”。

现在,对于下游分析,我只想继续使用唯一的对。有些对只是简单的重复项,可以使用duplicated()函数轻松删除。
但是,上面的人工数据帧中的第五行也是重复的,但顺序相反,不会被duplicated()unique()函数拾取。

关于如何删除这些行的任何想法?

最佳答案

mydf <- read.table(text="gene_x    gene_y
AT1       AT2
AT3       AT4
AT1       AT2
AT1       AT3
AT2       AT1", header=TRUE, stringsAsFactors=FALSE)

这是一种使用applysortpasteduplicated的策略:
mydf[!duplicated(apply(mydf,1,function(x) paste(sort(x),collapse=''))),]
  gene_x gene_y
1    AT1    AT2
2    AT3    AT4
4    AT1    AT3

这是一个略有不同的解决方案:
mydf[!duplicated(lapply(as.data.frame(t(mydf), stringsAsFactors=FALSE), sort)),]
  gene_x gene_y
1    AT1    AT2
2    AT3    AT4
4    AT1    AT3

关于r - 用R删除反向重复项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22756392/

10-12 22:38