我有以下数据框和多个观察结果:
CHR END START REF ALT
1 1445 1446 G A
1 1445 1446 A G
3 2787 2787 T -
3 2787 2787 - T
我希望删除行,如果REF
列为-
且ALT
列匹配另一行的REF
列,而其他列保持不变。
在我的例子中是所需的输出:
CHR END START REF ALT
1 1445 1446 G A
1 1445 1446 A G
3 2787 2787 T -
我不确定如何连接不同行的索引
始终在数据框中,要删除的行遵循“母亲”行
答案 0 :(得分:1)
你可以尝试
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)