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

如何在R中将计数对象的Ensembl基因ID合并至新列?

问题

我有一份带biotype注释的Ensembl基因数据集,已经写出代码按biotype统计各类型基因的数量:

genes <- c("ENSG01","ENSG02","ENSG03","ENSG04","ENSG05")
biotype <- c("protein_coding","protein_coding","protein_coding","lncRNA","lncRNA")
data <- data.frame(genes, biotype)
data
   genes        biotype
1 ENSG01 protein_coding
2 ENSG02 protein_coding
3 ENSG03 protein_coding
4 ENSG04         lncRNA
5 ENSG05         lncRNA

data_cts <- data %>%
    group_by(biotype) %>%
    dplyr::count()
data_cts
# A tibble: 2 × 2
# Groups:   biotype [2]
  biotype            n
  <chr>          <int>
1 lncRNA             2
2 protein_coding     3

现在需要把每个biotype对应的基因ID用/分隔合并成新列,得到如下格式的结果:

ENSEMBL <- c("ENSG04/ENSG05","ENSG01/ENSG02/ENSG03")
data_genes <- data.frame(data_cts, ENSEMBL)
data_genes
         biotype n              ENSEMBL
1         lncRNA 2        ENSG04/ENSG05
2 protein_coding 3 ENSG01/ENSG02/ENSG03

请问该怎么实现?

解决方案

可以直接在group_by(biotype)之后用summarize()一步完成数量统计与基因ID合并,无需分开处理再拼接:

library(dplyr)

# 原始数据
genes <- c("ENSG01","ENSG02","ENSG03","ENSG04","ENSG05")
biotype <- c("protein_coding","protein_coding","protein_coding","lncRNA","lncRNA")
data <- data.frame(genes, biotype)

# 统计+合并一步到位
data_genes <- data %>%
  group_by(biotype) %>%
  summarize(
    n = n(),  # 统计每个biotype的基因数
    ENSEMBL = paste(genes, collapse = "/")  # 用/分隔合并基因ID
  ) %>%
  ungroup()  # 取消分组,避免后续操作受分组状态影响

# 查看结果
data_genes

运行后输出结果完全符合需求:

# A tibble: 2 × 3
  biotype            n ENSEMBL             
  <chr>          <int> <chr>               
1 lncRNA             2 ENSG04/ENSG05       
2 protein_coding     3 ENSG01/ENSG02/ENSG03

补充说明

  • paste(genes, collapse = "/")是核心逻辑:将分组内的genes列元素用/连接成单个字符串
  • 若习惯用stringr包,也可以替换为stringr::str_c(genes, collapse = "/"),效果完全一致
  • ungroup()为可选操作,若后续无需修改该数据框,可省略此步骤

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 08:09:18