вы можете попробовать
library(tidyverse)
d %>%
unite(tmp, REF, ALT, remove = F) %>%
mutate(tmp=strsplit(tmp, "_") %>% map_chr(function(x) paste(sort(x), collapse ="_"))) %>%
group_by(CHR, END, START, tmp) %>%
mutate(n=ifelse(grepl("-", tmp), 1:n(), 1)) %>%
filter(n == 1) %>%
ungroup() %>%
select(-tmp, -n)
# A tibble: 3 x 5
CHR END START REF ALT
<int> <int> <int> <fct> <fct>
1 1 1445 1446 G A
2 1 1445 1446 A G
3 3 2787 2787 T -
Идея состоит в том, чтобы добавить идентификатор tmp
с отсортированными значениями ALT
, REF
, используя подходы strsplit
и map
. Таким образом, мы можем фильтровать по дубликатам, используя количество похожих строк.
Данные
d <- read.table(text=" CHR END START REF ALT
1 1445 1446 G A
1 1445 1446 A G
3 2787 2787 T -
3 2787 2787 - T", header=T)