由于 CHROM 在任何地方都是相同的,因此将列保持在排序中是没有用的。
否则,如果我很好地理解了您的问题,那么您将要求对一对变量进行排序。这可以使用 data.table 快速完成,如下所示:
# Supposing the 3 samples are put together in the same CSV file
# with space separators
library(data.table)
DT <- fread("~/Documents/a.csv", sep=" ", header=TRUE)
setkey(DT, REF, ALT)
DT[.(REF, ALT), .(CRA, POS, REF, ALT)]
> DT[.(REF, ALT), .(CRA, POS, REF, ALT)]
CRA POS REF ALT
1: dom_76 3665288 A G
2: dom_76 8920460 A G
3: dom_76 3665288 A G
4: dom_76 8920460 A G
5: dom_76 3365296 T A
6: dom_76 3540134 T C
7: dom_76 7110674 T C
8: dom_76 3540134 T C
9: dom_76 7110674 T C
如果您出于某种原因仍需要 CHROM 列,请将其保存在“按”分组中:
> DT[.(REF, ALT), .(CRA, POS, REF, ALT), by="CHROM"]
CHROM CRA POS REF ALT
1: chr1 dom_76 3665288 A G
2: chr1 dom_76 8920460 A G
3: chr1 dom_76 3665288 A G
4: chr1 dom_76 8920460 A G
5: chr1 dom_76 3365296 T A
6: chr1 dom_76 3540134 T C
7: chr1 dom_76 7110674 T C
8: chr1 dom_76 3540134 T C
9: chr1 dom_76 7110674 T C
但是您的问题有点模棱两可,因为“常见”可以解释为“平等”。我认为这不是您要求的,但为了完整起见,以防万一,下面是相应的排序(在发布的数据中为空):
> DT[REF == ALT, .(CRA, POS, REF, ALT), by="CHROM"]
Empty data.table (0 rows and 4 cols): CRA,POS,REF,ALT