我有一个数据框,里面有身份证、物种名称和DNA序列. DF中的一些物种有重复序列,对于每个物种,我只想保留其中的两个重复序列(因此,如果物种X有100个相同的序列,我只想保留其中的两个).这两个重复序列来自哪个ID并不重要,它可以是随机的,也可以是第一个被发现的实例.
ID | species |sequence
---------------------------
001 |Species A|ATGTAGCTCAGC
002 |Species A|ATGTAGCTCAGC
003 |Species A|ATGTAGCTCAGC
004 |Species B|CGCGCGATATTA
005 |Species B|AAACGGCCAATC
006 |Species C|TGTCGGCTCGTC
007 |Species D|ATGTAGCTCAGC
008 |Species E|GCGCGGAGATTT
009 |Species E|GCGCGGAGATTT
010 |Species E|AACTCTATATAT
011 |Species F|ATCGTAGCCTTG
012 |Species F|GGGCGCGCGGCG
013 |Species F|ATCGTAGCCTTG
014 |Species F|ATCGTAGCCTTG
我使用这个代码只保留了每个物种的一个重复序列,并过滤掉了所有其他重复序列. 改变它的最好方法是保持两个随机的重复序列,而不是只有一个?
library(dplyr)
df_filtered <- df %>%
group_by(species, sequence) %>%
slice(1) %>%
ungroup()
我的输出是这样的(尽管保留的重复序列可能是其他序列):
ID | species |sequence
---------------------------
001 |Species A|ATGTAGCTCAGC
003 |Species A|ATGTAGCTCAGC
004 |Species B|CGCGCGATATTA
005 |Species B|AAACGGCCAATC
006 |Species C|TGTCGGCTCGTC
007 |Species D|ATGTAGCTCAGC
008 |Species E|GCGCGGAGATTT
009 |Species E|GCGCGGAGATTT
010 |Species E|AACTCTATATAT
011 |Species F|ATCGTAGCCTTG
012 |Species F|GGGCGCGCGGCG
014 |Species F|ATCGTAGCCTTG