You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在分组后为DataFrame中每个分组保留恰好两条重复记录?

问题:保留每个物种重复DNA序列的前两条

现有一个包含ID、species(物种名称)和sequence(DNA序列)的DataFrame,其中部分物种存在重复的DNA序列。需求是:对每个物种的每条重复序列,恰好保留两条记录(可选择保留前两条,或随机选取均可)。

目前已实现保留每条重复序列仅一条记录的dplyr代码如下:

library(dplyr)
df_filtered <- df %>%
  group_by(species, sequence) %>%
  slice(1) %>%
  ungroup()

询问如何修改上述代码以实现保留两条重复序列的需求,预期输出示例如下:

IDspeciessequence
001Species AATGTAGCTCAGC
003Species AATGTAGCTCAGC
004Species BCGCGCGATATTA
005Species BAAACGGCCAATC
006Species CTGTCGGCTCGTC
007Species DATGTAGCTCAGC
008Species EGCGCGGAGATTT
009Species EGCGCGGAGATTT
010Species EAACTCTATATAT
011Species FATCGTAGCCTTG
012Species FGGGCGCGCGGCG
014Species FATCGTAGCCTTG

解决方案

只需修改slice()相关函数的参数即可实现需求:

1. 保留每组的前两条记录

将原代码中的slice(1)改为slice(1:2),这样每个分组(同一物种的同一条序列)会保留前两行记录:

library(dplyr)
df_filtered <- df %>%
  group_by(species, sequence) %>%
  slice(1:2) %>%  # 修改此处,取前两条
  ungroup()

2. 随机选取每组的两条记录

如果需要随机选取而非固定取前两条,可以使用slice_sample()函数并指定n=2:

library(dplyr)
df_filtered <- df %>%
  group_by(species, sequence) %>%
  slice_sample(n = 2) %>%  # 随机选取两条
  ungroup()

说明:group_by(species, sequence)的作用是将数据按物种和DNA序列分组,确保操作针对同一物种的同一条重复序列进行,完全匹配需求中的要求。

内容的提问来源于stack exchange,提问作者tadeufontes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 23:25:20