我有一个数据框,里面有身份证、物种名称和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

推荐答案

使用slice_head(n=2):

library(dplyr)
df_filtered <- df %>%
  group_by(species, sequence) %>%
  slice_head(n=2) %>%
  ungroup()

df_filtered
# A tibble: 12 × 3
      ID species   sequence    
   <dbl> <chr>     <chr>       
 1     1 Species A ATGTAGCTCAGC
 2     2 Species A ATGTAGCTCAGC
 3     5 Species B AAACGGCCAATC
 4     4 Species B CGCGCGATATTA
 5     6 Species C TGTCGGCTCGTC
 6     7 Species D ATGTAGCTCAGC
 7    10 Species E AACTCTATATAT
 8     8 Species E GCGCGGAGATTT
 9     9 Species E GCGCGGAGATTT
10    11 Species F ATCGTAGCCTTG
11    13 Species F ATCGTAGCCTTG
12    12 Species F GGGCGCGCGGCG

R相关问答推荐

以R表示的gglikert地块调整总数

更新合适的R mgcv::bam模型报告无效类型(关闭).'';错误

如何 bootstrap glm回归、估计95%置信区间并绘制它?

如何求解arg必须为NULL或deSolve包的ode函数中的字符向量错误

如何使用按钮切换轨迹?

使用gcuminc,如何使用逗号格式化风险表?

单个轮廓重叠条的单独图例

非线性混合效应模型(NLME)预测变量的置信区间

在数组索引上复制矩阵时出错

如何根据数据帧中的值从该数据帧中提取值?

如何根据R中其他变量的类别汇总值?

根据另一列中的值和条件查找新列的值

在另一个包中设置断点&S R函数

自动STAT_SUMMARY统计与手动标准误差之间的差异

使用geom_sf跨越日期线时的闭合边界

需要一个函数来在第一行创建一个新变量,然后用新变量替换一个不同的变量(对于多行)

R-使用stri_trans_General()将其音译为德语字母

如何创建一个由一个连续变量和一个因素变量组成的复杂方框图?

从两个数据帧中,有没有办法计算R中一列的唯一值?

如何将两个用不同的运算符替换*的矩阵相乘