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

如何在R中基于数据框计算FPKM并生成对应结果列?

问题描述

我有如下结构的数据框,希望使用公式fpkm = (X * 10^9) / (colSums(X) * length)(示例:第一行计算式为(1691 * 10^9)/(12660 * 1161)),对第5至8列(bam_RC1至bam_RC4)计算FPKM,并将结果存入单独的列。请问如何编写实现该功能的函数?

数据框结构:

chr     start       end strand   bam_RC1 bam_RC2 bam_RC3 bam_RC4   length
chr8  85554228  85555389      - 1691           137            45           107 1161
chr11  60877576  60879894      - 2410           235            72           161 2318
chr12 108793341 108795193      - 3334           143            64           164 1852
chr2  92432803  92434088      - 1043            60            28            66 1285
chr13 100124401 100125923      - 1479           114            62           129 1522
chr7 109519172 109521109      - 2703           123            36            95 1937
解决方案(R语言)

以下是实现需求的自定义函数,直接调用即可完成FPKM计算并添加新列:

calculate_fpkm <- function(df) {
  # 提取目标计数列(第5-8列)
  rc_cols <- df[, 5:8]
  # 计算每列的总计数
  col_totals <- colSums(rc_cols)
  # 获取基因长度列
  gene_len <- df$length
  
  # 批量计算FPKM
  fpkm_list <- lapply(seq_along(rc_cols), function(col_idx) {
    (rc_cols[[col_idx]] * 1e9) / (col_totals[col_idx] * gene_len)
  })
  
  # 给FPKM列命名
  names(fpkm_list) <- paste0(names(rc_cols), "_fpkm")
  
  # 合并到原数据框并返回
  cbind(df, as.data.frame(fpkm_list))
}

使用方法

假设你的数据框名为gene_df,执行以下代码得到带FPKM列的新数据框:

gene_df_with_fpkm <- calculate_fpkm(gene_df)

可选调整

如果后续目标列的位置可能变化,建议按列名提取计数列,替换函数内的rc_cols行:

rc_cols <- df[, c("bam_RC1", "bam_RC2", "bam_RC3", "bam_RC4")]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 19:56:13